REST-自定义更新操作

REST-自定义更新操作,rest,web-services,Rest,Web Services,我正在开发restapi,我的tickets集合有多种更新方式,因为它将经历多种状态。请注意,其中一些状态只能由RBCA的特定角色执行。考虑到这一点,最好的方法是什么 1使用子方法执行特定操作 修补程序/票据/:id/validate 修补程序/票据/:id/更新 修补程序/票据/:id/完成 2使用单个修补程序/tickets/:id控制根据票据的当前状态和用户角色更新的内容 对于其他最佳实践,哪一个是最好的 对于其他最佳实践,哪一个是最好的 简单回答:选择2 更详细的回答:我们关心哪个标识符

我正在开发restapi,我的tickets集合有多种更新方式,因为它将经历多种状态。请注意,其中一些状态只能由RBCA的特定角色执行。考虑到这一点,最好的方法是什么

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

修补程序/票据/:id/validate

修补程序/票据/:id/更新

修补程序/票据/:id/完成

2使用单个修补程序/tickets/:id控制根据票据的当前状态和用户角色更新的内容

对于其他最佳实践,哪一个是最好的

对于其他最佳实践,哪一个是最好的

简单回答:选择2

更详细的回答:我们关心哪个标识符被用作请求的目标的原因是HTTP在协议中内置了缓存失效语义:如果您成功地修补了一个资源,则涉及的通用组件知道如何逐出该资源的所有缓存表示。见RFC 7234

因此,如果我们实现一个网站,并试图利用缓存失效,我们可能会有一个类似的层次结构

# 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/PATCH端点需要自己进行额外的路由以达到验证/更新/完成逻辑。对于表单,这意味着使用提交的数据来确定想要的行为-可能是一个隐藏字段,或者端点只是根据表单数据中的键进行猜测