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

时间:2014-01-31 05:58:50

标签: rest methods principles

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

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

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

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

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

修改

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

图片上传实际会导致服务器发生变化:有一个新文件,虽然是暂时的。同样可以将复杂的搜索视为“文档”。

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

  1. 客户:发布短暂的资源
  2. 服务器:使用临时资源URI和TTL标头(?)进行响应。使用资源URI之外的其他内容进行回复是不容易的 - 对吧?
  3. 客户:在TTL时间内获取短暂资源
  4. 服务器在TTL
  5. 之后删除资源

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

2 个答案:

答案 0 :(得分:5)

技术约束时(例如,使用HTTP get和max64查询字符串,基本编码限制为2048)阻碍您添加业务价值(需要是能够在您的服务中比较或搜索图像)由于架构方法(RESTful webservice)我会说你可以打破一些你想要坚持的规则或原则。

最重要的是,您的客户可以合理地猜测 您的API行为。使用POST而不创建资源的图像搜索等例外情况可以明确记录,以便他们了解。

答案 1 :(得分:4)

例如,如果您要为搜索提交参数,则可以使用POST在服务器上创建新的搜索请求。然后使用您在服务器上创建的搜索参数对象中的ID完成GET。这与RESTful方法一致