考虑您需要设计一个API,允许用户通过任意消息计算HMAC签名。在REST世界中,可能会有很少的端点,例如:
POST /messages/
- 创建新的纯文本消息。
GET /messages/123/signature
- 获取HMAC消息#123。这是幂等的和纯粹的,因为签名将始终是相同的。
DELETE /messages/123
- 在签名后删除该邮件。
但是如果你不喜欢在两次通话之间以明文形式存储消息的想法呢?由于签名函数是幂等的,纯粹的,并且可以缓存,GET /sign/?message=...
似乎是一个不错的选择。但GET
请求的最大长度有限制,要签名的邮件平均大小为40KiB。
那么,是POST
吗?但POST不是幂等的,而这种方法是。
那么,是PUT
吗?那么应该使用什么动词而不是GET
?
答案 0 :(得分:0)
关于如何弯曲REST原则以克服技术问题的严峻问题,所以答案可能是固执己见的。
就个人而言,我会使用PUT,因为正如你所说,它是幂等的......
如果您正在从另一台服务器拨打电话,您可能可以将您的网络服务器配置为接受更长的GET请求(如果您是从网络浏览器调用,则不适用)。
答案 1 :(得分:0)
我可能会使用POST,因为它是事实上的“全能”方法,对于任何略微超出惯例的方法,例如像POST /messages/signature
,POST /messages?view=signature
之类的东西。没有ID的POST已经清楚地表明了一些不同的东西,而PUT看起来太像是创建资源的实际调用。