更新子资源时的标准 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 和请求主体中的类别不一样怎么办? 如果请求正文中的类别丢失怎么办?这种情况下请求是否仍然有效?)