APIRestful

时间:2018-05-14 17:10:23

标签: rest api restful-architecture

我已经阅读了几篇有关API的内容,但有些内容对于如何构建resources的主题并不清楚。我会给你一个简单但说明性的例子。我们想象我们有这种关系:

|Clients| (1:1) ------<>----- (0:M) |Orders| (1:1) ------<>------ (1:1) |Statuses|

客户可以有零个或多个订单,每个订单都有一个状态。

问题来自于制作资源时,明确的资源如下:

GET /clients (get a list)
GET /clients/10 (get detail of one client)
POST /clients (create a client passing data by BODY)

(可能更像PUT,但为了简化我简化的例子。)

问题是,从resource

获取来自客户订单

GET /clientes/10/orders

或到位:

GET /orders?id_cliente=10

获取订单的详细信息一样,会是什么样的?

GET /clientes/10/orders/10

或者这样做是有意义的(这也会显示你所拥有的的信息):

GET /orders/10

或者当您要删除订单时:

DELETE /orders/10

DELETE /clientes/10/orders/10

要创建订单客户是否始终存在,或者订单客户是否可以使用以下资源同时创建?例如,购买时未注册的客户会发出订单并同时注册

POST /orders 

订单数据中的客户数据传递给BODY。首先创建客户,然后创建订单

如果有人知道样本关系的所有有效资源会是什么样子,那么分享它们会很好。我不想进入API中也很重要的分页主题或其他主题。只是在资源方面。

1 个答案:

答案 0 :(得分:1)

为了解决您的困惑,您可以问自己以下问题。

  1. 我的资源是否有唯一的资源ID? - 不应该有多个资源元素指向同一个资源。
  2. 没有父母,子资源是否可以存在? - 如果它可以存在,那么它不应被视为子资源,但必须作为单独的资源得出结论。
  3. 在您的情况下,根据上述情况,很明显客户资源是订单资源的父级。所以API端点必须是,

    /clients (GET) - get all clients
    /clients/$client_id (GET) - get a client
    /clients/$client_id/orders (GET) - get all orders of the particular client
    /clients/$client_id/orders (POST) - create new order for the client
    /clients/$client_id/orders/$order_id (PUT) - Modify the particular order for the client
    /clients/$client_id/orders/$order_id (DELETE) - Delete the particular order for the client
    

    关于在子资源创建api时创建父资源的最后一个问题, 请参阅my answer

    注意:使用API​​中的查询参数可以支持排序,过滤,限制和分页。