PUT与POST文件上传使用Zend Framework构建REST风格的api

我正在通过Zend_Rest_Route使用Zend Framework构建一个RESTful API。 对于文件上传,我应该使用PUT还是POST来处理这个过程? 我试图尽可能与REST动词的定义保持一致。 请参阅:PUT或POST:故事的REST

我理解这一点的方式是,当且仅当我更新指定资源的全部内容时,我应该使用PUT。 我必须知道要输入的确切URL。 另一方面,如果我使用一些服务器端算法向服务器发送命令以创建指定资源的下级,那么我应该使用POST。

假设这是一个用于图片上传的REST API。 这是否意味着我应该使用POST如果服务器是要操纵图像文件(即创建缩略图,调整大小等); 并使用PUT,如果我只是简单地将图像原始文件保存到服务器?

如果我使用PUT处理文件上传,那么过程如下:

  • 用户发送GET请求以检索要放入的文件的特定URL。
  • 然后用户从GET响应发送PUT请求到URL。 上传的文件与用户上传完全一样。
  • 我对这个东西很陌生, 所以希望我在这里有意义...

    如果您知道这是最好的方式,请随时发表评论。


    这里似乎有相当多的误解。 PUT与POST并不是真正的替代与创造,而是关于幂等性和资源命名。

    PUT是一个幂等操作。 有了它,你可以给资源和实体的名称放置为资源的内容(可能是由服务器生成的添加)。 最重要的是,连续执行两次操作应该会产生相同的结果,就好像它只执行了一次或完成了20次一样,对于“同样的事情”的一些相当宽松的定义(它不一定是字节 - 字节相同,但用户提供的信息应完好无损)。 你永远不会希望PUT导致金融交易被触发。

    POST是一个非幂等操作。 您不需要提供您正在创建的资源的名称(也不需要创建POST;它可以根据需要去重复资源)。 POST通常用于实现“用新名称创建资源并告诉我名称是什么” - “新铸造名称”所暗含的缺乏幂等性符合这一点。 在创建新资源的情况下,发回位置标题中资源的定位符完全是正确的。

    现在,如果您采取的政策立场是客户不应该创建资源名称,那么您就可以使用POST完美地适合创建(尽管理论上它可以根据所提供的实体进行任何操作),PUT是如何进行更新的。 对于很多有意义的RESTful应用程序,但不是全部; 如果向用户呈现的模型是文件系统,那么让用户提供资源名称会产生大量的意义,并且PUT将成为主要的创建操作(并且POST将委派给不太常见的东西,比如创建空目录等on; WebDAV甚至可以进一步减少对POST的需求)。

    总结:不要从创建/更新的角度来思考,而应根据谁制作资源名称以及哪些操作是幂等的。 PUT实际上是创建或更新的,而POST是真的做任何事情都应该被重复 - 无所畏惧。


    对于文件上传,除非它正在替换现有资源,否则肯定使用POST。

    在REST中,POST是创建新资源,PUT替换现有资源,GET检索资源,以及DELETE删除资源。

    来源:http://en.wikipedia.org/wiki/Representational_state_transfer#RESTful_web_services


    REST不是一个标准,所以这很容易变成一场宗教战斗。 被认为是“RESTful”的AtomPub和OData标准确实同意这一点:POST =创建,而PUT =更新

    链接地址: http://www.djcxy.com/p/7021.html

    上一篇: PUT vs. POST for files upload RESTful api to be built using Zend Framework

    下一篇: HATEOAS: concise description