多对多关系的 REST 请求类型

REST request type for many to many relationship

Table结构

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 的结果?

还是客户端应该发出两个请求?

事实上,您可以指定要在响应负载中包含哪些字段作为查询参数。类似于:

GET /speakers/someid?fields=firstname,lastname,age,sessions

另一种方法(更好的方法)应该是利用 header Prefer(请参阅此 link 了解规范:https://www.rfc-editor.org/rfc/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 就此主题写了一篇很棒的博客 post:http://www.freshblurbs.com/blog/2015/06/25/api-representations-prefer.html

希望对你有帮助, 蒂埃里