Rest 获得或提出休息请求

Rest 获得或提出休息请求,rest,Rest,我遇到了这样一种情况,客户端应用程序可以请求与特定条件匹配的资源,如果匹配的资源不存在,则会创建并缓存它。对相同条件的后续请求将返回缓存的资源 我可以通过PUT请求来实现这一点,以创建资源和后续GET。但是,在我的特定场景中,需要客户机对我的系统的内部工作了解太多,即客户机不应该关心资源是否已经存在 因此,如果资源不存在,允许客户端发出一个GET请求来创建资源,这是ReSTful吗?理论上GET应该只是,而不是更改系统的状态。看 维基百科中的段落: 某些方法(例如,HEAD、GET、OPTION

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

我可以通过PUT请求来实现这一点,以创建资源和后续GET。但是,在我的特定场景中,需要客户机对我的系统的内部工作了解太多,即客户机不应该关心资源是否已经存在


因此,如果资源不存在,允许客户端发出一个GET请求来创建资源,这是ReSTful吗?

理论上GET应该只是,而不是更改系统的状态。看

维基百科中的段落:

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


但是,在您的场景中,初始GET设置一个纯粹用于缓存的资源。后续调用不会更改系统的状态,因此我建议在这种情况下使用GET。

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

如果您使用GET更改某些状态,并且您的应用程序已通过internet,则搜索引擎爬网可能会对您的系统产生不希望的影响


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

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

Richard Ev:如果你这么严格,你甚至不能将GET请求记录到服务器上,因为记录是一种副作用,会改变系统的状态。
编辑:我看你不再那么严格了,我同意:-)

使用GET是绝对合适的;资源的“呈现”超出了客户机/服务器HTTP交互的范围,因此它是否“创建”实际上并不重要——这是统一接口之外的一个实现问题

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


GET/resource?criteria1=xyz&criteria2=abc

谢谢你的回答,这是我思考的方式,但我想得到比我更了解ReST的人的确认。我认为这不是幂等性的正确定义。这并不意味着操作不会改变服务器的状态;这意味着执行n次操作与执行一次相同(如上一段所述)。因此,GET可以合法地改变系统的状态,并且仍然是幂等的,只要对同一URI的后续GET不会引起进一步的更改。PUT和DELETE也一样,但POST不一样。OPs所需的行为要求两个“GET”请求不是幂等的。第一个调用不返回任何内容并创建一个资源,后续调用将返回从未被请求创建的资源,并且不会生成进一步的资源。