如何处理REST中通常会相互请求的两个资源?

时间:2017-08-31 18:01:49

标签: rest api api-design

所以说我有三个型号/表:注意,发货和用户。我想要请求发货的页面,但我需要来自特定用户的相关注释(文本,图像等)的信息。

处理此问题的最佳方法是什么?

我应该创建像/api/shipment/note这样的嵌套资源,并向其添加查询参数以指定用户ID,pagesize等吗? (嵌套资源如/api/shipment/note有效的REST吗?我看到像/api/note/{noteid}/shipment这样的东西是有效的但是如何组合起来获得所有的东西)

或者我应该从/api/shipment请求所有货件(在查询参数中指定用户)并从/api/note/{noteid}请求每个货件的备注信息?

或者我应该使用/api/user/{userid}/shipment/note

或者因为我很少在没有说明信息的情况下请求发货资源,我是否应该将说明信息添加到/api/shipment端点?

2 个答案:

答案 0 :(得分:1)

如果您的用例让您同时查询货件和纸币,则组合这些呼叫会更有效。这也假设两组数据都来自同一个数据存储。

要处理您不需要note数据的情况,您可以引入详细级别或include查询字符串参数来标识应包含的额外数据。< / p>

  

API /装运包括=音符|?FOO |杆

OR

  

API /装运/ {ID}?包括=注

答案 1 :(得分:1)

根据here的答案提供更多可能性。

a)使用自定义媒体类型

margin-left

信用:https://stackoverflow.com/a/42147688/8543451

b)使用新的内容特定端点

margin-right

信用:https://stackoverflow.com/a/42146963/8543451

c)作为合并资源

这基本上是 b )但有一个转折:

GET /api/shipments HTTP/1.1  
Host: example.com  
Accept: application/vnd.company.full+json

这是因为它统一了加入的概念as a noun