用于更新字段的RESTFul方法

3 rest restful-url restful-architecture

我想知道,更新(!)项目的一个字段(状态)的RESTFul,灵活和更好的方法是什么

/api/v1/items/:id?action=start 
/api/v1/items/:id/start 
/api/v1/items/:id/ + action in the body
/api/v1/items/:id/status/{active|stopped}
Run Code Online (Sandbox Code Playgroud)

或物品

/api/v1/items?action=start 
/api/v1/items/start 
/api/v1/items/ + action in the body
/api/v1/items/status/{active|stopped}  
Run Code Online (Sandbox Code Playgroud)

Nik*_*hil 5

我更喜欢第三种API结构:

/api/v1/items/:id/ + action in the body
Run Code Online (Sandbox Code Playgroud)

我的理由包括:

  • 根据Richardson成熟度模型,URL应指向特定资源或资源集.您不希望在URL中添加更新信息,因为它不符合有效端点的条件.
  • 您希望将PUT用于影响资源的更新/替换操作.让URL选择资源,让body定义您想要更新的确切字段,否则使用任何其他逻辑.
  • 使用正文而不是查询字符串允许您插入任意大的信息(达到某个限制,但大于查询字符串),这些信息在逻辑上可能与操作配对(从您的情况开始).它还可以在未来扩展操作方面提供更大的灵活性.
  • 您可以列出可以在响应中的端点上执行的相关操作/api/v1/items.这将是一个信息丰富的超媒体控件列表.同样,Richardson成熟度模型提供了一个很好的例子.