什么HTTP动词应该用于GET语义的超大请求?

时间:2015-09-12 12:24:56

标签: api rest http architecture

考虑您需要设计一个API,允许用户通过任意消息计算HMAC签名。在REST世界中,可能会有很少的端点,例如:

  

POST /messages/ - 创建新的纯文本消息。

     

GET /messages/123/signature - 获取HMAC消息#123。这是幂等的和纯粹的,因为签名将始终是相同的。

     

DELETE /messages/123 - 在签名后删除该邮件。

但是如果你不喜欢在两次通话之间以明文形式存储消息的想法呢?由于签名函数是幂等的,纯粹的,并且可以缓存,GET /sign/?message=...似乎是一个不错的选择。但GET请求的最大长度有限制,要签名的邮件平均大小为40KiB。

那么,是POST吗?但POST不是幂等的,而这种方法是。

那么,是PUT吗?那么应该使用什么动词而不是GET

2 个答案:

答案 0 :(得分:0)

关于如何弯曲REST原则以克服技术问题的严峻问题,所以答案可能是固执己见的。

就个人而言,我会使用PUT,因为正如你所说,它是幂等的......

如果您正在从另一台服务器拨打电话,您可能可以将您的网络服务器配置为接受更长的GET请求(如果您是从网络浏览器调用,则不适用)。

答案 1 :(得分:0)

我可能会使用POST,因为它是事实上的“全能”方法,对于任何略微超出惯例的方法,例如像POST /messages/signaturePOST /messages?view=signature之类的东西。没有ID的POST已经清楚地表明了一些不同的东西,而PUT看起来太像是创建资源的实际调用。