Rest 何时应该在响应正文中包含URI?

Rest 何时应该在响应正文中包含URI?,rest,Rest,如果我有一个资源/用户和一个资源/索赔,那么/claims/7将返回以下内容: { id: 7, text: "hello", postingUserID: 9 } 可以吗?还是应该如此 { id: 7, text: "hello", postingUserURI: "/users/9" } 我认为后者更安静,但这很不方便,因为如果我想用ID做其他事情,我必须解析出9 或者我应该两者兼得 { id: 7, text: "hello", postingUserID: 9, postingUse

如果我有一个资源/用户和一个资源/索赔,那么/claims/7将返回以下内容:

{ id: 7, text: "hello", postingUserID: 9 }
可以吗?还是应该如此

{ id: 7, text: "hello", postingUserURI: "/users/9" }
我认为后者更安静,但这很不方便,因为如果我想用ID做其他事情,我必须解析出9

或者我应该两者兼得

{ id: 7, text: "hello", postingUserID: 9, postingUserURI: "/users/9" }
我喜欢这个,但也有点多余


最安静的事情是什么?谢谢

RESTful最需要做的事情是包含URI。第一个选项对RESTful客户机不是很有用,因为它代表了一条死胡同。web浏览器是restful客户端的一个很好的例子:选项1类似于为没有超链接的网页提供服务。用户无法提升应用程序状态(浏览器选项卡),只能阅读页面,然后按后退按钮

我建议选择2。客户端不应该需要ID,因为它们只能用于使用URI模板生成的RPC样式的HTTP请求。这表示非REST的带外信息。ID是一个不需要公开的内部实现细节。您甚至不需要包含索赔对象的ID。当前在客户端中使用ID的任何内容都应该使用从上一个请求接收的超链接

例如,我自己的API有一个“作业编号”,这个编号是一个没有字母部分的整数。我在数据库中使用一个自动递增的ID字段来生成和保存这些作业编号,但在向客户端显示它们时,我将其显示为“作业编号”,而不是数据库ID。客户端不会将其用于生成任何未来的请求,仅用于人类可读的显示

在开发新API时,您可能会发现输出一个类似于JSON响应的HTML页面很有用。然后使用web浏览器在其周围导航。每个GET请求都应该通过单击超链接(锚元素)而不是通过在URL栏中键入ID来生成。这种技术被称为API冲浪


与REST无关,我会将
postingUserURI
更改为
author
,作为URI的字段名。

我没有参与这个问题的结束,但为了让它重新打开,我建议不要问“哪一个是最好的”类型的问题,最好将其表述为“我正在考虑这些方案,以适应这一计划。。。它们都合适吗?如果没有,请在我选择之前解释原因。”这样你就不是在征求意见,而是在征求事实。你将选择权留给自己,很可能会得到同样的答案。