RESTful:什么时候可以发布而不在服务器上创建资源?

RESTful:什么时候可以发布而不在服务器上创建资源?,rest,methods,principles,Rest,Methods,Principles,根据REST原则,我理解到服务器的所有帖子都应该用于创建资源;在服务器上修改某些内容。如果要获取信息,请使用GET 但是,如果您需要发送大量信息以获取资源,该怎么办 例如,复杂的搜索参数对于URL来说太长。或者,假设您希望发送一张图像进行搜索,比如OCR或类似的图像比较 在这些情况下,似乎有必要将数据发布到服务器,但结果不会改变,只是信息。发布图像,接收服务器上存在的类似图像的列表 我不想构建一个违反这些原则的RESTAPI,除非它们实际上并不违反这些原则 编辑 到目前为止,似乎所有的答案都是正

根据REST原则,我理解到服务器的所有帖子都应该用于创建资源;在服务器上修改某些内容。如果要获取信息,请使用GET

但是,如果您需要发送大量信息以获取资源,该怎么办

例如,复杂的搜索参数对于URL来说太长。或者,假设您希望发送一张图像进行搜索,比如OCR或类似的图像比较

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

我不想构建一个违反这些原则的RESTAPI,除非它们实际上并不违反这些原则

编辑

到目前为止,似乎所有的答案都是正确的(!):塞尔吉奥和凯关于在需要时“改变规则”的实际价值是正确的。但尿苷有一个很好的观点:

图像上载实际上会导致服务器发生变化:有一个新文件,尽管是临时文件。将复杂的搜索视为“文档”也是如此

我想我们可以考虑“短暂的”变化的概念,“短暂的帖子”,在那里服务器被改变并产生一种新的短暂的资源。在这种情况下,出于RESTful考虑,这可能是以下行为:

  • 客户端:发布临时资源
  • 服务器:用临时资源URI和TTL头(?)响应。用资源URI以外的东西响应是不restful的,对吗
  • 客户端:在TTL时间内获取临时资源
  • 服务器在TTL之后删除资源

  • 我会考虑在第2步中用完全短暂的资源作出响应,在Retriaby:(<)/P> < P> > <强>技术约束< /强>(例如使用HTTPGET和Base64编码极限的最大大小查询字符串)<强>阻止您添加业务值< /强>(需要能够在您的服务中比较或搜索图像)由于架构方法的原因(RESTful Web服务)我想说,您可能会违反一些您试图维护的规则或原则


    最重要的是,你的客户可以合理地猜测你的API是如何运行的。使用POST而不创建资源的图像搜索这样的异常可以被明确地记录下来。让他们知道。

    例如,如果你正在提交搜索参数,你可以在上面创建一个新的搜索请求使用POST启动服务器。然后在您完成后,使用您在服务器上创建的搜索参数对象的ID执行GET。这与RESTful方法保持一致

    “一些规则可能会被弯曲,其他规则可能会被破坏”。这不像在某个地方会有一个REST委员会“啊,你不应该在这里发布。我们不允许你的应用程序进入市场”。用你的常识。(顺便说一下,这是对“矩阵”的引用):)图像搜索可能是一个糟糕的例子。在这种情况下,最有可能的图像将使用POST上传,然后在最后一个chunk GET请求之后将提供搜索结果。糟糕的是,你是对的。这是user2020565给出的例子。