RESTful:什么时候可以在不在服务器上创建资源的情况下进行POST?

nod*_*man 9 methods rest principles

根据REST原则,我知道服务器的所有POST都应该用于创建资源; 修改服务器上的内容.如果要获取信息,请使用GET.

但是,您需要发送大量信息以获取资源的情况呢?

例如,复杂的搜索参数对于URL来说太长了.或者,假设您想要发送要搜索的图像,例如OCR或类似的图像比较.

在这些情况下,似乎有必要将数据POST到服务器,但结果不会是变化,只是信息.POST图像,接收服务器上存在的类似图像的列表.

我不想构建违反这些原则的REST API,除非它们实际上不是违规行为.

编辑

到目前为止,似乎所有答案都是正确的(!):Sergio和Kay对于在需要时"弯曲规则"的实际价值是正确的.但uriDium有一个好点:

图像上传实际上导致服务器发生变化:有一个新文件,虽然是暂时的.可以将复杂搜索视为"文档".

我想我们可以考虑"短暂的"变化的概念,"短暂的POST",其中服务器被更改并产生新的短暂资源.在这种情况下,对于RESTful考虑因素,可能这可能是以下行为:

  1. 客户端:POST一个短暂的资源
  2. 服务器:使用临时资源URI和TTL头(?)进行响应.使用资源URI以外的其他方式回复是不安宁的 - 对吧?
  3. 客户端:在TTL时间内获取短暂资源
  4. 服务器在TTL之后删除资源

我会考虑用第2步的完整短暂资源做出回应并在那里结束互动,只是为了反叛:-)

Kay*_*sar 6

技术方面的限制(例如,使用HTTP GET和编码的2048极限64基最大规模查询字符串) 阻碍你增加商业价值(需要能够比较或搜索服务的图像),由于架构方法( RESTful Web服务)我想说的是,您可以打破您要坚持的某些规则或原则。

最重要的是,您的客户端可以合理地猜测 API的行为。可以明确记录一些异常,例如使用POST进行图像搜索而不创建资源,以便他们注意。