REST-自定义更新操作

时间:2019-02-21 14:49:25

标签: rest web-services

我正在使用REST API,我的票证集合有多种更新方式,因为它将经历多种状态。请注意,其中某些状态只能由特定角色(RBCA)执行。考虑到这一点,最好的方法是什么?

1)使用子方法执行特定操作

匹配/ tickets /:id / validate

PATCH / tickets /:id / update

PATCH / tickets /:id / finish

2)使用单个PATCH / tickets /:id

根据票证的当前状态和用户角色控制要更新的内容

在REST最佳实践方面,哪一个是最好的?

1 个答案:

答案 0 :(得分:1)

  

在REST最佳实践方面,哪一个是最好的?

简短答案:选择#2。

更长的答案:我们关心将哪个标识符用作请求目标的原因是HTTP协议中内置了缓存失效语义:如果成功修补了资源,则所涉及的通用组件将驱逐所有该资源的缓存表示。参见RFC 7234中的Invalidation

因此,如果我们正在实施一个网站,并尝试利用缓存无效化,那么我们可能具有类似

的层次结构
# the readable link to a specific tickets collection
/tickets/:id

# a validation form that submits data to /tickets/:id
/tickets/:id/validation

# an update form that submits data to /tickets/:id
/tickets/:id/update

# a finish form that submits data to /tickets/:id
/tickets/:id/finish

所以我们用于“更新”票证集合的工作流程可能看起来像...

GET /tickets/:id
GET /tickets/:id/update
POST /tickets/:id

在不受HTML限制的API中,我们可以考虑使用除POST之外的不安全方法来完成工作。

注意:这确实意味着我们实现中的“ POST / PATCH”端点需要自己做额外的路由才能到达验证/更新/完成逻辑。对于表单,这意味着使用提交的数据来确定预期的行为-可能是隐藏字段,或者端点可能只是根据表单数据中的键进行猜测。