RESTful API POST 没有正文的调用请求

RESTful API POST call request without a body

我想在 API 中创建一个新调用,将 link 两个已创建的资源组合在一起。因此,我不需要在 post 正文中传递任何 json 实体,我只需要在 URL 中传递的资源 ID。这是错误的做法吗?所以基本上我现在的请求只是一个简单的路径 {cid}/projects/{projectID}/subcontractors/{subcontractorID} 在 post 调用方法中,我从路径中提取资源 ID,然后 link 它们。响应只有通过或失败 {"success":true}。这是错误的做法吗?有更好的方法吗?

如何设计 API 完全取决于您。从技术角度来看,带有空负载的 POST 请求完全没问题。


但是,假设您打算将 contractor 添加到 project,我认为它可以更好地用 payload 表示:

POST /projects/1/contractors HTTP/1.1
Host: api.example.org
Content-Type: application/json

{ "contractorId": 100 }

如果您需要管理 项目 承包商 的更多信息,则此方法特别有用。如果上述请求成功,响应将包含 201 状态代码以及标识新创建资源的 Location header。

因为您正在链接已经存在的资源 - 项目和承包商。我不喜欢 POST 方法。 相反,我会使用 PATCH 方法(因为我只编辑现有资源的部分内容) 有效载荷或请求 URL 方法都是可以接受的。

请求URL:

PATCH /projects/3/contractors/23 HTTP/1.1
HOST example.com/api

有效载荷

PATCH /projects/3/contractors HTTP/1.1
HOST example.com/api
Content-Type: application/json
{ "contractor_id": 23 }

成功的响应由 200 状态代码指示,其中可能包含有效负载,或者 204 回应