GET或PUT表示REST请求

时间:2010-02-04 09:27:16

标签: rest

我遇到的情况是客户端应用程序可以请求匹配特定条件的资源,如果匹配的资源不存在,则会创建并缓存该资源。对相同条件的后续请求将返回缓存的资源。

我可以通过PUT请求实现这一点,以创建资源和后续GET。但是,在我的特定情况下,要求客户了解我的系统的内部工作情况,即客户端不应该关心资源是否已经存在。

因此,允许客户端发出创建资源的单个GET请求(如果资源尚不存在)是否可靠?

4 个答案:

答案 0 :(得分:6)

理论上GET应该只是GET,而不是改变你的系统状态。请参阅idempotency

维基百科的段落:

  

某些方法(例如,HEAD,GET,OPTIONS和TRACE)被定义为安全,这意味着它们仅用于信息检索,不应更改服务器的状态。

但是,在您的方案中,初始GET正在设置纯粹用于缓存的资源。后续调用不会改变系统的状态,所以我建议在这种情况下GET没问题。

答案 1 :(得分:3)

为此目的使用GET是绝对合适的;资源的“呈现”超出了客户端/服务器HTTP交互的范围,因此它是否“创建”无关紧要 - 这是统一接口之外的实现问题。

我所说的是对客户来说无关紧要 - 因为就其而言,请求是安全+幂等的。它不关心服务器是否正在创建一些内容,以便出于效率原因即时返回,或者它是否已经“存在”并且只是输出。

GET / resource?criteria1 = xyz& criteria2 = abc

答案 2 :(得分:1)

是的,如果创建资源的唯一目的是缓存它。 这样,您可以将系统视为已包含所有可能的GET结果,并且不会违反幂等性。机器如何获得结果(来自缓存或算法)并不重要,甚至无趣。

Richard Ev:如果你这么严格,你甚至无法将GET请求记录到服务器,因为日志记录是副作用并且会改变系统的状态。 编辑:我发现你不再那么严格,我同意: - )

答案 3 :(得分:0)

在获取某些数据时使用GET,并在更改某些状态时使用POST。

如果您使用GET更改某些状态,并且您的应用是通过互联网进行的,则搜索引擎抓取可能会对您的系统产生不良影响。

此外,浏览器会缓存GET请求,以便在数据更改频率较低的情况下节省一些带宽和服务器资源。