首页 > 其他分享 >restFul的优缺点以及思考

restFul的优缺点以及思考

时间:2023-08-31 16:33:25浏览次数:36  
标签:状态 HTTP 请求 GET 优缺点 思考 PUT restFul DELETE

常用经验

  • 在HTTP中,我们要通过 URL 进行资源的定位

    比如:

    要取 id=888 的用户信息,我们就向/user/{id} 这个路径发送请求,

    要取 id=888 的用户的订单列表,我们就向/user/{id}/orders 这个路径发送请求

  • 在HTTP 中,DELETE、PUT、GET请求应该是幂等的,而POST 则不是幂等的。所谓“幂等”指的是:对于一个接口采用同样的参数请求一次和请求多次的结果是一致的,不会因为多次请求而产生副作用

  • 在HTTP中,GET请求的响应是可以被缓存的,而DELETE、PUT、POST请求的响应是不可以被缓存的。客户端、网关等可以根据情况对 GET 请求的响应进行缓存,从而提升性能

  • 在HTTP中,服务器端要通过状态码来反映资源获取的结果

    比如:

    客户端要获取id-8的用户,如果要获取的用户不存在,则服务器返回的状态码为 404,而如果当前客户端没有权限获取这个用户,服务器返回的状态码为 403。再如,对于新增用户请求,如果新增成功,服务器返回的状态码为 201

优点

  • 所有的资源都尽量通过URL来表示,URL的语义性更清晰

  • 对所有类型资源的新增、删除、修改、查询操作都统一为向资源发送POST、DELETE.、PUT、GET 请求,接口统一且具有自描述性,减少了开发人员对接口文档的依赖性

  • 对于 GET、PUT、DELETE 等幂等的操作,网关、网络请求组件等可以对失败的请求自动重试

  • 网关等可以对 GET 请求进行缓存,能够提升系统的访问速度,而且降低服务器的压力

  • 通过HTTP状态码反映服务器端的处理结果,能够统一错误码,避免自定义错误码带来的不统一的问题

    户端也可以根据错误码进行统一处理,比如对于 403 状态码,客户端统一提示用户去登录

  • 网关等系统可以根据状态码来分析系统的访问数据,比如可以根据 HTTP状态码分析有多少成功的请求,有多少失败的请求

缺点

  • 真实系统中的资源非常复杂,很难清晰地进行资源的划分
  • 真实系统中的业务很复杂,并不是所有的操作都能简单地对应到PUT、GET、DELETE、POST上
  • 真实系统是在不断进化的,一个操作最开始的时候被设计为幂等的 PUT,但是后来的版本又修改了逻辑,可能该操作就变成了不幂等的。如果调用者继续对这个操作进行重试可能会有副作用
  • 在 Restful 中,资源尽量通过 URL来定位,要尽量避免使用 QueryString 及请求报文体传递数据
  • HTTP状态码的个数是有限的,特别是用于表示业务相关的错误码主要在 4xx状态码段中,而业务系统中的错误非常复杂,仅通过 HTTP状态码来反映错误有时候会无法满足要求
  • 有的客户端是不支持 PUT、DELETE 请求的。例如: 旧版本的程序

总结

REST 概念是用来指导我们设计接口的,而不是给开发带来麻烦的,它只是一个参考的风格,并不是一个必须遵守的规范,不能因为要遵守Restful 风格而影响开发进度及系统的稳定。项目开发的时候,需要根据项目特点、公司人员等多方面情况,确定一个符合项目情况的定制版 Restful 规范。

标签:状态,HTTP,请求,GET,优缺点,思考,PUT,restFul,DELETE
From: https://www.cnblogs.com/zwhdd/p/17669881.html

相关文章

  • restful规范和django源码写接口
    一、restful规范1、restful规范是什么,如何来的?一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中的规范RoyFielding的博士论文提出的2、以后写接口,大致都要遵循如下规范-1数据的安全保障-》url链接一般都采用https协议进行传输--》它比http安全......
  • 初识MQ-异步通讯的优缺点
          ......
  • 初识MQ-同步通讯的优缺点
       ......
  • drf-restful规范
    RESTfulAPI规范简介: REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。""" RESTful是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中。"""这种风格的理念认为后端......
  • RESTful API规范,序列化,Django Rest_Framework
    一.RESTfulAPI规范REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。RESTful是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中。这种风格的理念认为后端开发任......
  • 关于DDD中聚合设计的思考(以博客园为例)
    前言聚合作为领域模型中重要的业务功能单元,它的设计是领域建模过程中非常重要的工作。其中聚合根的判断并非一件易事,往往给人一种似是而非的感觉,让人难以捉摸,陷入两难的境地。今天笔者就想以博客园为例来探讨下:博客(Blog)和评论(Comment)究竟是不是一个聚合?问题探讨众所周......
  • 一类字符串解析题目的思考
    一类字符串解析题目的思考相关题目最近整理发现,某些机考场景比较喜欢对复杂字符串做解析,例如:394.字符串解码1190.反转每对括号间的子串726.原子的数量特征其具体的表现为,给出一个字符串,给出一个基本结构字符串,例如{abc},是一个三明治(肉夹馍)结构,与扁平化json类似......
  • 项目管理思考-0828
    1收集需求是项目成功中的一个重要因素,需求越多,做的越多出错的可能性越多。2收集需求沟通技巧WHATWHYHOW。客户考虑是是做什么,技术考虑是怎么做,项目经理更应该考虑客户为什么这么做。举个例子,客户想要更快的一匹马,若是技术人员研究方法变成了一直研究马更快的事情,若是与客户......
  • 多线程以rtsp流调用多路海康摄像头的思考
    如题,我使用了多线程,以rtsp流调用多路海康摄像头。使用了opencv作为拉流库,但是结果不如人意。当摄像头数增加时,cpu占用率变化不大,但是却出现了卡顿。当增大到5个时,甚至发生崩溃。我使用了千兆光纤网,显然不是带宽问题。那会不会是imshwo显示久了不更新呢,显然不是。接受速度快于显......
  • 对restful的一些思考
    此笔记仅代表个人观点,如有出入请各位不吝指正。我常常会想工作为什么要提倡使用RestFul的规范开发接口?其实在工作中看来,不使用restful开发和使用restful开发最终达成的效果甚至性能应该是没有差别的以下是一段代码示例在Restful之前的操作:http://127.0.0.1/user/query/1GET......