HTTP中的GET,PUT,DELETE,POST

339 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

前言

HTTP中的GET,PUT,DELETE,POST 公司来的架构师,约定规范前后端交付全部用POST请求,不要用GET,PUT和DELETE. 个人不敢苟同,

HTTP 里面的几种请求方法

public enum RequestMethod {
    GET,
    HEAD,
    POST,
    PUT,
    PATCH,
    DELETE,
    OPTIONS,
    TRACE;

    private RequestMethod() {
    }
}

1、GET用于信息获取,而且是安全的和幂等的

GET请求是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变。该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、HEAD

获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等。

3、POST一般用于创建数据,不是安全和幂等的

POST请求既不是安全的,也不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。

4、PUT一般用于创建或完整更新数据,而且是安全和幂等的

PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改完整的数据内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

5、PATCH

PATCH请求是对PUT请求的补充,一般用来对已知资源部分更新,是后来新出的标准,GitHub Api也开始使用。

6、DELETE

DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作,无论进行多少次DELETE操作,其结果并没有不同。

7、 OPTIONS

查询指定的 URL 能够支持的方法。 会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容。

8、TRACE

服务器会将通信路径返回给客户端。

发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

总结

1、HTTP协议的不同方法的作用是不一样的,在不同的场景使用不同的请求,接口api定义一目了然,便于理解,而不是全部都用POST请求。 2、接口文档的定义比如我们用的SWAGGER. 不用场景用不同的协议,看起来非常清爽,看下两个系统接口对比吧。

image.png

image.png