在移动互联网的大潮下,『微服务』的概念也越来越被大家接受并应用于实践,日益增多的web rvice逐渐统一于restful 架构风格,如果开发者对restful 架构风格不甚了解,则开发出的所谓restful api总会貌合神离,不够规范。
架构风格设计:
简介:
restful架构风格最初由roy t. fielding(http/1.1协议专家组负责人)在其2000年的博士学位论文中提出。http就是该架构风格的一个典型应用。从其诞生之日开始,它就因其可扩展性和简单性受到越来越多的架构师和开发者们的青睐。一方面,随着云计算和移动计算的兴起,许多企业愿意在互联网上共享自己的数据、功能;另一方面,在企业中,restful api(也称restful web服务)也逐渐超越soap成为实现soa的重要手段之一。时至今日,restful架构风格已成为企业级服务的标配。
rest即reprentational state transfer的缩写,可译为”表现层状态转化”。rest最大的几个特点为:资源、统一接口、uri和无状态。特别符合http的无状态请求。
所谓”资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。资源总要通过某种载体反应其内容,文本可以用txt格式表现,也可以用html格式、xml格式表现,甚至可以采用二进制格式;图片可以用jpg格式表现,也可以用png格式表现;json是现在最常用的资源表示格式。
资源和数据理解如下:
资源是以json(或其他reprentation)为载体的、面向用户的一组数据集,资源对信息的表达倾向于概念模型中的数据:
资源总是以某种reprentation为载体显示的,即序列化的信息常用的reprentation是json(推荐)或者xml(不推荐)等reprentation 是rest架构的表现层相对而言,数据(尤其是数据库)是一种更加抽象的、对计算机更高效和友好的数据表现形式,更多的存在于逻辑模型中
restful架构风格规定,数据的元操作,即crud(create, read, update和delete,即数据的增删查改)操作,分别对应于http方法:get用来获取资源,post用来新建资源(也可以用于更新资源),put用来更新资源,delete用来删除资源,这样就统一了数据操作的接口,仅通过http方法,就可以完成对数据的所有增删查改工作。
即:
get(lect):从服务器取出资源(一项或多项)。post(create):在服务器新建一个资源。put(update):在服务器更新资源(客户端提供完整资源数据)。patch(update):在服务器更新资源(客户端提供需要修改的资源数据)。delete(delete):从服务器删除资源。可以用一个uri(统一资源定位符)指向资源,即每个uri都对应一个特定的资源。要获取这个资源,访问它的uri就可以,因此uri就成了每一个资源的地址或识别符。
一般的,每个资源至少有一个uri与之对应,最典型的uri即url。
所谓无状态的,即所有的资源,都可以通过uri定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态
的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态
的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过http中的get
方法得到资源,这是典型的restful风格。
roa
即resource oriented architecture,restful 架构风格的服务是围绕资源
展开的,是典型的roa架构(虽然“a”和大学生找兼职“架构”存在重复,但说无妨),虽然roa与soa并不冲突,甚至把roa看做soa的一种也未尝不可,但由于rpc也是soa,比较久远一点点论文、博客或图书也常把soa与rpc混在一起讨论,因此,restful 架构风格的服务通常被称之为roa架构,很少提及soa架构,以便更加显式的与rpc区分。
rpc风格曾是web rvice的主流,最初是基于xml-rpc协议(一个远程过程调用(remote procedure call,rpc)的分布式计算协议),后来渐渐被soap协议(简单对象访问协议(simple object access protocol))取代;rpc风格的服务,不仅可以用http
,还可以用tcp
或其他通信协议。但rpc风格的服务,受开发服务采用语言的束缚比较大,如.net框架中,开发web rvice的传统方式是使用wcf,基于wcf开发的服务即rpc风格的服务,使用该服务的客台球技巧户端通常要用c#来实现,如果使用python或其他语言,很难实现可以直接与服务通信客户端;进入移动互联网时代后,rpc风格的服务很难在移动终端使用,而restful风格的服务,由于可以直接以json
或xml
为载体承载数据,以http方法为统一接口完成数据操作,客户端的开发不依赖于服务实现的技术,移动终端也可以轻松使用服务,这也加剧了rest取代rpc成为web rvice的主导。
rpc与restful的区别如下面两个图所示:
通常开发者做服务相关的客户端开发时,使用的所谓restful服务,基本可分为本真rest
和hybrid风格
两类。本真rest
即我上文阐述的restful架构风格,具有上述的4个特点,是真正意义上的restful风格;而hybrid风格
,只是借鉴了restful的一些优点,具有一部分restful的特点,但对外依然宣称是restful风格的服务。(窃以为,正是由于hybrid风格服务混淆了restful的概念,才在restful架构风格提出了本真rest的概念,以为了划分界限 :p)
hybrid风格的最主流的用法是,使用get
方法获取资源,用post
方法实现资源的创建、修改和删除。hybrid风格之所以存在,据我了解有两种来源:一种情况是因为,某些开发者并没有真正理解何为restful架构风格,导致开发的服务貌合神离;而主流的原因是由于历史包袱 —— 服务本来是rpc风格的,由于上文提到的rpc的劣势及restful的优势,开发者在rpc风格的服务上又包装了一层restful的外壳,通常这层外壳只为获取资源服务,因此会按restful风格实现get
方法,如果客户端提出一些简单的创建、修改或删除数据的需求,则通过http协议中最常用的post
方法实现相应功能。
因此,开发restful 服务,如果没有历史包袱,不建议使用hybrid风格。
由于restful风格的服务是无状态的,认证机制尤为重要。例如上文提到的员工工资,这应该是一个隐私资源,只有员工本人或其他少数有权限的人有资格看到,如果不通过权限认证机制对资源做一层限制,那么所有资源都以公开方式暴露出来,这是不合理的,也是很危险的。认证机制解决的问题是,确定访问资源的用户是谁;权限机制解决的问题是,确定用户是否被许可使用、修改、删除或创建资源。权限机制通常与服务的业务逻辑绑定,因此权限机制需要在每个系统内部定制,而认证机制基本上是通用的,常用的认证机制包括ssion auth(即通过用户名密码登录),basic auth,token auth和oauth,服务开发中常用的认证机制为后三者。
oauth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
对于oau七夕创意礼物th验证登录方式有问题,或者api接口设计有疑问的可以加群交流相关技术。同时可以获取相关tp5\laravel\swoole相关源码
本文发布于:2023-04-07 19:20:07,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/006ef40ddb3ff362e406fe840fb60f1e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:RESTful 架构风格.doc
本文 PDF 下载地址:RESTful 架构风格.pdf
留言与评论(共有 0 条评论) |