Rest 休息服务公约

Rest 休息服务公约,rest,resteasy,Rest,Resteasy,在Rest服务中,当我们想要从服务器检索一些数据时,通常使用“GET”请求,但是我们也可以使用“POST”请求检索数据。 我们使用“POST”创建,“PUT”更新,“DELETE”删除,但我们甚至可以使用“DELETE”请求创建新数据 所以我想知道这背后的真正原因是什么,为什么要使用这些约定 通过代理缓存POST和DELETE not 是的,您可以使用GET创建数据,但现在您必须销毁缓存的数据。为什么要做额外的工作 此外,由于使用目的不同,可接受的最大标头大小也不同。我建议阅读,其中明确说明了每

在Rest服务中,当我们想要从服务器检索一些数据时,通常使用“GET”请求,但是我们也可以使用“POST”请求检索数据。 我们使用“POST”创建,“PUT”更新,“DELETE”删除,但我们甚至可以使用“DELETE”请求创建新数据


所以我想知道这背后的真正原因是什么,为什么要使用这些约定

通过代理缓存POST和DELETE not

是的,您可以使用GET创建数据,但现在您必须销毁缓存的数据。为什么要做额外的工作

此外,由于使用目的不同,可接受的最大标头大小也不同。

我建议阅读,其中明确说明了每个http方法应如何使用

为什么使用这些约定

它们是公约,即作为标准采用的最佳做法。您不必遵守标准,但
REST
服务的大多数消费者都认为您遵守标准。这样更容易理解实现/接口

所以我想知道这背后的真正原因是什么,为什么要使用这些约定

所以世界不会崩溃

不,但说真的,为什么要创建任何协议或标准?以这一历史情景为例。早在Google的早期,许多开发者(相对于现在)对HTTP协议不是很精通。你可能会发现一些网站只是使用了众所周知的(也许只知道)GET方法。所以会有一些链接是GET请求,但是会执行一些操作,这些操作是POST请求,这会改变服务器的状态(有时是非常重要的状态变化)。进入谷歌,它每天都在网络上爬行。现在你有了谷歌正在抓取的所有链接,所有这些链接都是GET请求,但是改变了服务器的状态。因此,所有这些公司在改变状态的服务器上都受到了大量的攻击。他们都认为自己被攻击了!但谷歌没有做错任何事。GET请求的HTTP语义状态不应具有状态更改行为。它应该是“只读”方法。因此,最终这些公司变得聪明起来,开始遵循HTTP语义。真实的故事

这个故事的寓意是:遵守协议,这就是他们的目的——遵守协议

您似乎是从服务器实现的角度来看待它的。是的,您可以实现您的服务器来接受删除请求以“获取”某些内容。这不是手头真正的问题。在实现服务器时,您需要考虑客户机的期望。我的意思是,最终,您将创建一个API。从代码API的角度来看它

public class Foo {

    public Bar bar;

    public Bar deleteBar() {  
        return bar;            // Really?!
    }

    public void getBar() {  
        bar = null;            // What the..??!
    }
}
我不知道开发人员在游戏中会持续多久,编写这样的代码。任何希望“获取”
Bar
(简单地说就是命名语义)的调用方都会遇到另一件事。你的休息服务也是如此。它最终是一个WEB API,应该遵循构建它的协议(即HTTP)的语义。那些理解该协议的人只需根据他们发出的请求类型,就可以知道API的作用(至少在CRUD的意义上)

我对您或任何试图学习REST的人的建议是对HTTP进行良好的处理。我会把下面的文件放在手边。读一次,然后作为参考


如果使用自定义服务器和/或客户端实现,则可能根本没有任何缓存。因此,您的答案是推测性的。HTTP规范提供了关于何时以及如何使用每个HTTP方法和响应代码的建议。由于此协议不限制使用,因为这是特定于域的,因此您实际上可以创建数据vie
GET
,但也可以检索数据vie
DELETE
。因此,如果您实现f.e.一个返回实体vie DELETE的重新定义队列,可能会有意义。此外,REST应该是非常自解释的——但是,如果您自定义HTTP操作,您将失去这些语义,因此需要提供明确的文档(这与REST原则背道而驰)。嘿@peeskillet您能看看这个问题并告诉我您是否找到了解决方案吗?我非常需要!