首页 > 解决方案 > 更新子资源时的标准 REST Api 约定

问题描述

我有一种情况:类别 - 不同类型的主数据。订单 - 引用了类别。它是从 Order 到 Category 的一对一映射。Order 表有一个外键列到 Category。现在 api 来获取订单

/users/orders

将返回类型为

{ "name: "abc", "categoryId" : 23 }

会很好,或者我们应该将json返回为

{ "name: "abc", "category" : "CAT-A" }

我们还有一个客户知道类别的创建/更新订单用例。我们需要一个 api 来发布带有类别的新订单。应该是这样的吗?

1. post /api/orders { "categoryId" : 23, ....}

还是这样的?

2. post /api/orders/category/23/order

标签: jsonrestone-to-onejsonconvert

解决方案


首先,使用标识符(或链接!):

{ "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 和请求正文中的类别不一样怎么办?如果请求中的类别怎么办? body 不见了?在这种情况下请求仍然有效吗?)


推荐阅读