对于有助于决策的 REST 端点,什么是好的做法
What would be a good practice for a REST endpoint that helps with decisions
假设我有以下端点:
/operations/needed
这将有两个响应:
- 需要手术
- 不需要操作
响应的最佳做法是什么?
以下是我的一些想法:
一个
{"operationNeeded":true}
B
OK->Not needed
Bad_request->Needed
C
{"operation":"/operations"} -> Needed
{"operation":null} -> Not needed
你更喜欢哪一个? (为什么?)
请记住,无论好坏,我们都不会在其他任何地方使用 HATEOAS 类型的响应。
REST 针对 large grain 超媒体传输(想想“网页”)进行了优化。试图传达一点点信息真的不是最佳选择。
一种常见的方法是注意 HTTP 可以区分“不存在”和“空”。当一个资源为空时,我们可以发送一个200 response with a content-length header, or we can send a 204 with no entity body at all. When the resource has no representation available, then 404为宜。
所以你会发现 API 使用 204/404 来指示是否设置了标志。
Github's Starring API 是采用这种方法的示例。
也可以将其视为一种资源,其表示会根据该位是否设置而改变。
您的 C
方法可能是该组中最“RESTful”的方法 -- provide/remove links[=29 是正常的=] 到其他资源,作为与 REST 客户端通信的一种方式,当前可以使用哪些应用程序状态转换。同样,想想网页——只有当有更多项目要查看时才会有“第 2 页”link,当您已经在末尾时没有“下一页”link,依此类推。这是 HATEOAS 方法。
但他们都“很好”。
假设我有以下端点:
/operations/needed
这将有两个响应:
- 需要手术
- 不需要操作
响应的最佳做法是什么? 以下是我的一些想法:
一个
{"operationNeeded":true}
B
OK->Not needed
Bad_request->Needed
C
{"operation":"/operations"} -> Needed
{"operation":null} -> Not needed
你更喜欢哪一个? (为什么?) 请记住,无论好坏,我们都不会在其他任何地方使用 HATEOAS 类型的响应。
REST 针对 large grain 超媒体传输(想想“网页”)进行了优化。试图传达一点点信息真的不是最佳选择。
一种常见的方法是注意 HTTP 可以区分“不存在”和“空”。当一个资源为空时,我们可以发送一个200 response with a content-length header, or we can send a 204 with no entity body at all. When the resource has no representation available, then 404为宜。
所以你会发现 API 使用 204/404 来指示是否设置了标志。
Github's Starring API 是采用这种方法的示例。
也可以将其视为一种资源,其表示会根据该位是否设置而改变。
您的 C
方法可能是该组中最“RESTful”的方法 -- provide/remove links[=29 是正常的=] 到其他资源,作为与 REST 客户端通信的一种方式,当前可以使用哪些应用程序状态转换。同样,想想网页——只有当有更多项目要查看时才会有“第 2 页”link,当您已经在末尾时没有“下一页”link,依此类推。这是 HATEOAS 方法。
但他们都“很好”。