为什么建议GET、POST、PUT、DELETE各司其职了

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shangrila_kun/article/details/89053193
  • 什么是HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)等协议。

  • HTTP支持的七种情况方式
  1. GET
  2. POST
  3. PUT
  4. Delete
  5. HEAD
  6. Options
  7. Patch
  • 七种方式有什么功能?应用场景是?
  1. GET:
    GET是用于获取资源的(例如html文本,xml,png,json等)。
    安全和幂等。
  2. HEAD:
    HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,但是在这种场景下还是比较适合的:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。rest ful api中很少使用head请求。
    安全和幂等。
  3. PUT:
    用于创建和更新资源,这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。在restful api 中一般使用put更新资源。
    非安全、幂等;
    4.DELETE:
    删除某一个资源。
    非安全、幂等。
    5.POST:
    向服务器提交数据,用于创建资源。
    非安全、非幂等。
  4. OPTIONS:
    这个方法很有趣,但极少使用。用于url验证,验证接口服务是否正常。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
    安全、幂等。
  5. Patch
    用于创建、更新资源,于PUT类似,区别在于PATCH代表部分更新;
    非安全、非幂等;
  • 为什么应该各司其职了

其实不管什么增删改查,对于所有 http 请求,一律采用 POST,也能实现所有的业务,但是为什么不这样了。

  1. post,get,put,delete 是标准,如果大家都采用这种方式,那么调用接口可读性好。毕竟接口除了自己调用外,还需要给别人调用,遵守这样的规则,于人于己都是有利的。
  2. GET 请求可被缓存,请求的记录可以保持到浏览器中, 请求可被收藏为书签。POST 请求不会被缓存,比较安全, 请求不会保留在浏览器历史记录中, 不能被收藏为书签。因为get可以快取, 缓存和保留历史记录及书签等特殊功能。
  • post和put的区别:

post和put的区别在于uri,或者说post用于创建子资源,比如接口:POST /api/person/ 会创建一个资源比如 /api/person/1或者/api/person/2 … 或者/api/person/n,创建了新的uri,而put方法创建资源的uri是 PUT /api/person/1,这样就创建了一个资源,如果1已经存在那么就是更新,所以put并不是只是更新操作。再有post是非幂等的。
通常情况下,我们都会将post、get、put、delete对应到CRUD操作上,但实际上put并不是只能更新。

  • patch的使用:

patch是2010后成为的正式http方法,详见RFC5789,它是对put的补充,在没有patch之前,我们都是用put进行更新操作,这时候我们的接口中通常会有一个逻辑规则,如:如果对象的的一个字符属性为NULL,那么就是不更新该属性(字段)值,如果对象的字符属性是“”,那么就更新该属性(字段)的值,通过这种方式来避免全部覆盖的操作。现在有了patch就解决了这种判断,在put接口中不管属性是不是null,都进行更新,在patch接口中就对非null的进行更新;

  • 什么是幂等性

刚刚对上面的请求方式分别给出了他们是否具有幂等性,可能有些不懂的,可以参考这篇文章:

猜你喜欢

转载自blog.csdn.net/shangrila_kun/article/details/89053193