REST API:对资源执行/撤消操作的最佳方式

Syl*_*Syl 5 rest api-design

注意:我认为这里的POST意思是“创建”和PUT“更新”,就像 GitHub 一样。这不是争论支持POSTor的地方PUT

我有company资源和assign行动。我想知道如何在我的 REST API 中转换这种行为。

我想过这样的事情:

PUT /company/:id/assign
user_id: 5
Run Code Online (Sandbox Code Playgroud)

如果我想取消分配这个用户怎么办?

  • 我应该使用布尔值作为参数吗?
  • 我应该使用一个unassign动作吗?
  • 我应该使用另一个 HTTP 动词吗?

在最新的 GitHub API 上,我看到了如何为要点加注星标

PUT /gists/:id/star
Run Code Online (Sandbox Code Playgroud)

为什么不,但如何取消要点

DELETE /gists/:id/star
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪。您正在更新对资源的操作并将其删除。奇怪的。我可以理解是否POST代替PUT.

POST /gists/:id/starDELETE /gists/:id/star似乎更逻辑给我。你怎么认为?

编辑:我将与POST和一起工作DELETE。但是由于无法使用该DELETE方法发送数据,因此我必须传递user_idin URL:

POST /company/:id/assign/:user_id
DELETE /company/:id/assign/:user_id 
Run Code Online (Sandbox Code Playgroud)

Mat*_*bin 2

使用布尔值并不是很清楚。我可以将其视为一个非显而易见的论证术语。考虑到 API 解释越明显,您的语法就越良好。

最后,使用 DELETE 方法是您可以选择的最佳选择。当您将用户分配给公司时,您就创建了一种关系。当您想要取消分配时,您可以删除该关系。