7

我正在设计一个简单的 CRUD REST API。这是我的第一次,所以我想获得一些关于我的设计是否有意义的反馈。

我正在使用 HTTP 方法:GET、POST、DELETE 和 UPDATE。API 将使用和获取 JSON 格式的数据。示例 URL 将如下所示:

GET (list): curl http://<domain>/myapp/rest/v1/colors
POST: curl -XPOST http://<domain>/myapp/rest/v1/colors -d '{
       "name": "red",
       "shade": "light"
      }'
GET (single item): curl http://<domain>/myapp/rest/v1/colors/2
DELETE: curl -XDELETE http://<domain>/myapp/rest/v1/colors/2
etc...

问题

在 POST 请求之后,将在数据库中创建一条记录。那么,POST请求是否应该返回新创建记录的ID呢?所以那个ID可以用在UPDATE, DELETE and GET (single item)

4

2 回答 2

5

HTTP 规范为 POST 定义了以下内容:

如果在源服务器上创建了资源,则响应应该是 201(已创建)并包含描述请求状态并引用新资源的实体和 Location 标头(参见第 14.30 节)。

所以这基本上意味着:

  • 您应该201 Created作为状态码返回
  • 您应该返回一个Location标头,指向新创建资源的 URI
  • 您可以选择在 POST 响应正文中包含资源的表示,以使客户端不必GET针对从标头获得的值发出另一个请求Location
于 2013-05-08T11:37:38.327 回答
1

POST 应该返回一个重定向到单个项目的新 url。

您可能想要松开 url 的版本标识符。

而是以优雅地处理各种版本的方式设计您的表示和客户端。例如,客户端不应依赖于特定格式,而应仅依赖于它实际需要的属性。

您的描述中缺少的是 HATEOAS 原则,即客户端不应硬编码任何 URL,而是在其他实体的表示中找到 URL 以进行进一步操作。由于您没有为 URL 返回的结果显示示例文档,因此我们无法判断您是否以一种很好的方式这样做。

查看此演示文稿,它解释了该主题,还提到了一些有助于实现它的 Spring 库。

于 2013-05-08T11:13:20.007 回答