gpt4 book ai didi

REST API : returning newly create resource id?

转载 作者:行者123 更新时间:2023-12-05 00:21:17 25 4
gpt4 key购买 nike

就良好的 REST API 设计而言,返回 id 是否是个好主意?新创建的资源?假设我有一个 API:

api/resource POST

我见过一些大师有这样的 API 来返回空 json 并将 URI 插入到 Location标题作为响应。我想回归
{ 'id': '1000' } 

这样调用者就可以立即使用它做一些事情会更好。再节省一次到服务器的往返行程。如果有的话,这种方法有什么问题?

最佳答案

根据要求,我将我的评论重新发布为答案,并添加了更多细节以值得回答。

通过 HTTP 创建新资源的常用方法 POST方法是返回 201 Created状态码。因此,响应还应包含资源的当前状态作为实体主体和指向可以找到资源的 URI 的位置 header 。不这样做可能会破坏某些客户端并阻止他们与服务的正确交互。这里的客户可能是浏览器、定制的“languageOfYourChoice”应用程序甚至其他服务。

在理想的 RESTful 世界中,客户端只知道一个开始的 URI(例如服务的入口 URI,例如 http://service.company.com/)。调用该 URI 的响应应该返回一个客户端可以理解的文档,并包含客户端可以使用的更多链接(如果有兴趣)。这个概念类似于人类每天使用的老大哥 HTML 和类似的网络资源,其中链接可用于从起始页面移动到子页面甚至外部资源或其他超媒体资源。 REST 只是 Web 事物的抽象和概括。

虽然不是实际问题的一部分,而且这是基于意见的,但 RESTful 开发者之间正在就通用文档类型与专用文档类型(mime 类型,...)的有用性进行讨论。我认为应该有一个标准化的通用 REST 感知格式,用于 JSON、XML ......只是简单的 application/json还不够,因为这没有定义如何包含链接和模式。偶HAL关于 URI 上的可执行操作以及调用这些 URI 时期望的文档格式以及需要传递给服务的参数的描述性不够 (IMO)。

文档格式(又名媒体类型)是 Roy Fieldings 首字母缩略词 HATEOAS 的核心概念之一。 .除了入口点和客户理解的媒体类型(因此上一段)之外,客户不需要任何先验知识。可能的操作都是通过遵循 HTTP 协议(protocol)规范并了解各自的媒体类型表达的内容来描述的。

因此,返回 URI 而不是 ID 有几个优点:

  • URI 本身是唯一的,不同的供应商虽然可能具有相同的 ID
  • 客户端不需要知道服务器如何创建这些 URI,另一方面,服务器几乎可以免费提供它们。返回 1234 的产品 ID客户端几乎可以通过多种方式在 URI 中组合 - 因此客户端需要有关如何创建 URI 的特殊知识,以便服务器实际上能够正确处理请求。
  • 服务器可以移动资源而无需客户端更改,因为客户端(在理想的 RESTful 世界中)将在进一步的请求响应中检索资源的 URI。因此,客户端只需要返回字段的真正“含义”
  • 的语义知识。

    关于REST API : returning newly create resource id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054393/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com