我已经阅读了几篇有关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中也很重要的分页主题或其他主题。只是在资源方面。
答案 0 :(得分:1)
为了解决您的困惑,您可以问自己以下问题。
在您的情况下,根据上述情况,很明显客户资源是订单资源的父级。所以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中的查询参数可以支持排序,过滤,限制和分页。