RESTful详解,如何设计RESTful风格API 快来打我* 2023-10-18 15:09 89阅读 0赞 **目录** 1.理解含义: 1.1资源(Resources) 1.2表现层(Representation) 1.3状态转化(State Transfer) 2.什么是RESTful架构: 3.为什么要用RESTful结构呢? 3.1从原理角度来分析: 3.2 Levels的意义 3.3从应用角度来分析: 4. 为什么会出现Restful -------------------- ## 1.理解含义: ## REST -- Representational State Transfer 直译:表现层状态转化,全称是 Resource Representational State Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。 Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等; Representational:**表现层---**某种表现形式,比如用JSON,XML,JPEG等; State Transfer:状态变化。通过HTTP动词实现。 ### **1.1资源(Resources)** ### 所谓”资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。 ### **1.2表现层(Representation)** ### “资源”是一种信息实体,它可以有多种外在表现形式。我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)。 比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。 URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的”.html”后缀名是不必要的,因为这个后缀名表示格式,属于”表现层”范畴,而URI应该只代表”资源”的位置。它的具体表现形式,应该在HTTP请求的头信息中用**Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述** ### 1.3状态转化(State Transfer) ### 访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。 互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。 客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:**GET、POST、PUT、DELETE**。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。 ## 2.什么是RESTful架构: ## **符合REST原则的架构方式即可称为RESTful,Restful web service是一种遵守了rest风格的web服务** (1)每一个URI代表一种资源; (2)客户端和服务器之间,传递这种资源的某种表现层; (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化 **REST基本原则:** * 网络上的所有事物都被抽象为资源 * 使用HTTP动词:GET POST PUT DELETE; * 所有的操作都是无状态,服务器端不应保存过多上下文状态,即每个请求都是独立的; * 为每个资源设置URI,每个资源都有一个唯一的资源标识符; * 对资源的各种操作不会改变资源标识符 * 同一个资源具有多种表现形式,通过XML、JSON进行数据传递; ## 3.为什么要用RESTful结构呢? ## 网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现“API First”的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论 RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。 ![Center][] ### **3.1从原理角度来分析:** ### 根据Richardson Maturity Model(理查德森成熟度模型), REST架构的成熟度有4个等级: ![Center 1][] ### **3.2 Levels的意义** ### Level 0 POX Level 1 解释了如何通过分治法(Divide and Conquer)来处理复杂问题,将一个大型的服务端点(Service Endpoint)分解成多个资源。 Level 2 引入了一套标准的动词get、post、put、delete,用来以相同的方式应对类似的场景,移除不要的变化。 Level 3 引入了可发现性(Discoverability),它可以使协议拥有自我描述(Self-documenting)的能力。 这一模型帮助我们思考我们想要提供的HTTP服务是何种类型的,同时也勾勒出人们和它进行交互时的期望。 ### **3.3从应用角度来分析:** ### 一、REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口); 二、Server提供的RESTful API中,URL中只使用名词来指定资源,**原则上不使用动词**。“资源”是REST架构或者说整个网络处理的核心。 URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。 1、看Url就知道要什么 2、看http method就知道干什么 3、看http status code就知道结果如何 三、用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转: GET 用来获取资源, POST 用来新建资源(也可以用于更新资源), PUT 用来更新资源, DELETE 用来删除资源。 ## 4. 为什么会出现Restful ## **在Restful之前的操作:** http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据 http://127.0.0.1/user/save POST 新增用户 http://127.0.0.1/user/update POST 修改用户信息 http://127.0.0.1/user/delete GET/POST 删除用户信息 **RESTful用法:** http://127.0.0.1/user/1 GET 根据用户id查询用户数据 http://127.0.0.1/user POST 新增用户 http://127.0.0.1/user PUT 修改用户信息 http://127.0.0.1/user DELETE 删除用户信息 之前的操作是没有问题的,大神认为是有问题的,有什么问题呢?你每次请求的接口或者地址,都在做描述,例如查询的时候用了query,新增的时候用了save,其实完全没有这个必要,我使用了get请求,就是查询.使用post请求,就是新增的请求,我的意图很明显,完全没有必要做描述,这就是为什么有了restful. **如何使用:** ![Center 2][] **SpringMVC实现restful服务:** SpringMVC原生态的支持了REST风格的架构设计 所涉及到的注解: \--@RequestMapping \---@PathVariable \---@ResponseBody ![Center 3][] **结尾:restful就是旧技术,新风格** 参考: [https://blog.csdn.net/a78270528/article/details/78469758 ][https_blog.csdn.net_a78270528_article_details_78469758] [http://www.ruanyifeng.com/blog/2014/05/restful\_api.html][http_www.ruanyifeng.com_blog_2014_05_restful_api.html] [https://blog.csdn.net/tangxueguan1940/article/details/80949717 ][https_blog.csdn.net_tangxueguan1940_article_details_80949717] [Center]: https://img-blog.csdn.net/20171107171036253?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTc4MjcwNTI4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [Center 1]: https://img-blog.csdn.net/20171107165849966?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTc4MjcwNTI4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [Center 2]: https://img-blog.csdn.net/20170625151347639?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnhpYW9jaGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [Center 3]: https://img-blog.csdn.net/20170625152145836?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnhpYW9jaGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [https_blog.csdn.net_a78270528_article_details_78469758]: https://blog.csdn.net/a78270528/article/details/78469758 [http_www.ruanyifeng.com_blog_2014_05_restful_api.html]: http://www.ruanyifeng.com/blog/2014/05/restful_api.html [https_blog.csdn.net_tangxueguan1940_article_details_80949717]: https://blog.csdn.net/tangxueguan1940/article/details/80949717
还没有评论,来说两句吧...