正确的RESTful动词

时间:2015-12-21 11:44:27

标签: rest

我有一个带条件操作的资源:

/foos/{id}/authorize
/foos/{id}/cancel

这个想法是授权会将资源的状态从保存(默认)更改为授权(由第三方应用程序)。授权可以从远程部分返回错误或者可以被授权。一旦获得授权,资源就无法再次授权,因此这不是可以一次又一次调用的操作。

撤销授权资源时会发生取消。一旦取消,资源将永久保留。

RESTful世界中这种操作的正确动词是什么,考虑到这种操作不安全,不能被认为是幂等的,因为第二次调用会返回“资源已被取消”这样的错误,同时我也是我没有创建新资源,只是在已知资源中进行状态更改?

1 个答案:

答案 0 :(得分:5)

我会用

DELETE /authorization/1234

围绕DELETE对以前删除的资源的幂等性进行了全面辩论。请参阅https://evertpot.com/idempotence-in-http/https://leedavis81.github.io/is-a-http-delete-requests-idempotent/

这里的底线是,在一个总是有一个结果的数学世界中,幂等性是有意义的,但在HTTP中你得到两个不同的结果 - 服务器的响应和资源的新结果州。很难确定什么是幂等的,什么不是幂等的。

在HTTP规范不明确的领域,我建议不是教条主义而不是教条主义。

  • 如果您真的希望客户端知道他们自己是否删除了资源,或者是否有其他人这样做了,那么我认为在先前删除的资源上回复404没有问题。

  • 如果你不关心,或者认为它永远不会发生(因为没有足够的并发访问,或者因为所有客户端总是在发送DELETE之前做GET时刻),你在所有情况下都可以愉快地坚持到204。