表格结构
session
-------------------------
id | name | date
-------------------------
speaker
-------------------------
id | name
-------------------------
session_speaker
-------------------------
session_id | speaker_id
-------------------------
请求方法
a) GET /speakers (all speakers)
b) GET /speakers/:id (details on specific speaker)
c) GET /speakers/:id/sessions (list of sessions of a speaker)
问题
我应该提出什么类型的请求来表明我不仅需要发言者的详细信息,还需要它的会话,基本上将呼叫(b)和(c)的结果合并为一个。
另外,如何在真正的商业项目中完成?客户端进行两次调用(b& c)或者他们是否开发了另一个REST端点,因此结合了b& c在一个电话中?
或者客户应该发出两个请求?
答案 0 :(得分:0)
实际上,您可以将响应有效负载中要包含的字段指定为查询参数。类似的东西:
GET /speakers/someid?fields=firstname,lastname,age,sessions
另一种方法(更好的方法)应该是利用标题Prefer
(请参阅规范的此链接:https://tools.ietf.org/html/rfc7240)来指定您希望在响应有效负载中包含哪种详细信息:
return=minimal
:只有发言人提示include=sessions
:发言人提示和他/她的会议以下是一个示例:
Get /speakers/someid HTTP/1.1
Host: api.example.org
Content-Type: application/json
Prefer: include=sessions
Vary: Prefer,Accept,Accept-Encoding
Irakli Nadareishvili写了一篇关于这个主题的精彩博文:http://www.freshblurbs.com/blog/2015/06/25/api-representations-prefer.html。
希望它可以帮到你, 亨利