更新子资源时的标准 REST Api 约定
Standard REST Api convention while updating child resource
我有一种情况:类别 - 不同类型的主数据。
Order - 引用了 Category。
它是从订单到类别的一对一映射。订单 table 有一个指向类别的外键列。
现在 api 获取订单
/users/orders
return 是否会输入
{ "name: "abc", "categoryId" : 23 }
会很好,或者我们应该 return json 作为
{ "name: "abc", "category" : "CAT-A" }
我们还有一个 create/update 订单用例,客户知道类别。
我们需要一个 api 到 post 带有类别的新订单。
应该是这样的吗?
1. post /api/orders { "categoryId" : 23, ....}
或者类似这样的东西?
2. post /api/orders/category/23/order
首先,使用标识符(或链接!):
{ "name: "abc", "categoryId" : 23 }
或
{ "name: "abc", "category" : "/api/categories/23" }
不是名字(因为这些可能会不时更改)
{ "name: "abc", "category" : "CAT-A" }
对于订单的发布,我建议使用
post /api/orders { "categoryId" : 23, ....}
只是因为您是在订单资源上添加订单。订单应该已经有一个类别被引用(或链接!)。
这种方法
post /api/orders/category/23/order
也可以。但是客户端需要使用已经包含在请求主体中的信息构建一个 url,所以事情只会变得更复杂一点(如果 url 和请求主体中的类别不一样怎么办? 如果请求正文中的类别丢失怎么办?这种情况下请求是否仍然有效?)
我有一种情况:类别 - 不同类型的主数据。 Order - 引用了 Category。 它是从订单到类别的一对一映射。订单 table 有一个指向类别的外键列。 现在 api 获取订单
/users/orders
return 是否会输入
{ "name: "abc", "categoryId" : 23 }
会很好,或者我们应该 return json 作为
{ "name: "abc", "category" : "CAT-A" }
我们还有一个 create/update 订单用例,客户知道类别。 我们需要一个 api 到 post 带有类别的新订单。 应该是这样的吗?
1. post /api/orders { "categoryId" : 23, ....}
或者类似这样的东西?
2. post /api/orders/category/23/order
首先,使用标识符(或链接!):
{ "name: "abc", "categoryId" : 23 }
或
{ "name: "abc", "category" : "/api/categories/23" }
不是名字(因为这些可能会不时更改)
{ "name: "abc", "category" : "CAT-A" }
对于订单的发布,我建议使用
post /api/orders { "categoryId" : 23, ....}
只是因为您是在订单资源上添加订单。订单应该已经有一个类别被引用(或链接!)。
这种方法
post /api/orders/category/23/order
也可以。但是客户端需要使用已经包含在请求主体中的信息构建一个 url,所以事情只会变得更复杂一点(如果 url 和请求主体中的类别不一样怎么办? 如果请求正文中的类别丢失怎么办?这种情况下请求是否仍然有效?)