多对多关系的REST请求类型

多对多关系的REST请求类型,rest,uri,naming-conventions,Rest,Uri,Naming Conventions,表结构 session ------------------------- id | name | date ------------------------- speaker ------------------------- id | name ------------------------- session_speaker ------------------------- session_id | speaker_id ------------------------- 请求

表结构

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
另一种方法(更好的方法)应该是利用标题
preference
(有关规范,请参阅此链接:)来指定您希望在响应负载中包含的详细信息:

  • 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就这个主题写了一篇很棒的博客文章:

希望它能帮助你,
Thierry

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

GET /speakers/someid?fields=firstname,lastname,age,sessions
另一种方法(更好的方法)应该是利用标题
preference
(有关规范,请参阅此链接:)来指定您希望在响应负载中包含的详细信息:

  • 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就这个主题写了一篇很棒的博客文章:

希望它能帮助你,
Thierry

我删除了我的答案,因为这可能是以下内容的重复:请尝试您的答案,我在建议的链接中找不到答案,我的问题主要是将call(b)和(c)结合在一起。我找到了一篇关于这个主题的文章,请看一看。我删除了我的答案,因为这可能是重复的:请尝试你的答案,我没有在建议的链接中找到答案,我的问题是具体的结合电话(b)和(c)本质上是一个。我发现一篇文章,谈到这个问题,请看一看。ietf建议使用
return=representation
return=minimal
,然而,博客正在引入
trister
,不确定这些值是否为标准值。我希望遵循标准和中立约定,而不明确说明
include=sessions
,因为我还有其他几个多对多表,不想将api与实体名称耦合。其次
return=representation
表示完全连接?(演讲者及其会话)和
return=minimal
仅表示演讲者?您是否建议这种方法。另外,如果数据来自另一个方向,即插入,一种帖子是添加扬声器,而另一种帖子是Speaker+它的会话(连接/连接表的外键),我如何区分这两种操作还有一个标题我可以应用于指定聚合函数输出,例如,
选择MAX(speaker.lastModified)作为从speaker
到端点的lastModified
/speakers
ietf建议使用
return=representation
return=minimal
,然而,博客正在引入
trister
,不确定这些值是否为标准值。我希望遵循标准和中立约定,而不明确说明
include=sessions
,因为我还有其他几个多对多表,不想将api与实体名称耦合。其次
return=representation
表示完全连接?(演讲者及其会话)和
return=minimal
仅表示演讲者?您是否建议这种方法。另外,如果数据来自另一个方向,即插入,一种帖子是添加扬声器,而另一种帖子是Speaker+它的会话(连接/连接表的外键),我如何区分这两种操作还有一个标题我可以应用于指定聚合函数输出,例如
选择MAX(speaker.lastModified)作为从speaker
到端点的lastModified
/speakers