没有主体的RESTful API POST调用请求

时间:2018-09-19 16:25:56

标签: rest api post api-design

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

2 个答案:

答案 0 :(得分:1)

如何设计API完全取决于您。从技术角度来看,具有有效载荷为空的POST请求是完全可以的。


但是,假设您打算将承包商添加到项目,我认为可以用有效负载更好地表达它:

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

{ "contractorId": 100 }

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

答案 1 :(得分:1)

由于您正在链接现有资源-项目和承包商。我不喜欢POST方法。 相反,我将使用PATCH方法(因为我仅编辑现有资源的部分内容) 有效负载或请求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回复