技术分享|RESTful风格的优势

2018-06-12 15:39:22

随着互联网的高速发展,越来越多的人开始意识到网站即软件,且是一种新型的软件,基于http协议的rest架构风格便应运而生,它是全新的针对Web应用的开发风格,就譬如给孩子请个家教一对一教学,针对孩子特点因材施教,孩子亦可以最简单便捷的方式去接收知识。它使人们真正理解了Http协议本来面貌,也是当今世界最成功的互联网超媒体分布式系统架构,因此我们把REST也写作为REST/HTTP

那么到底REST是什么,从何而来,又有着怎样的优势呢?接下来,看看西安中软卓越老师怎么用深入浅出的语言让你明白它吧。

技术分享|RESTful风格的优势.jpg

可以得知RESTful风格的特点如下:

1)每一个URI代表一种资源,独一无二;

2)客户端和服务器之间,传递这种资源的某种表现层;

3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"

值得注意的是RESTful风格的RUI中是不包含动词的。但是RESTful风格的优势是什么?

REST的全称在文章里已经有了,其中的核心是第一个字母R,即资源(Resource

REST的核心在于,当你设计一个系统的时候,资源是第一位的考虑,你首先从资源的角度进行系统的拆分、设计,而不是像以往一样以操作为角度来进行设计

我们平时搞系统是这样的:

1.有新建用户功能

2.新建用户需要一个URL

3.往这个URL发送的数据要定义好

4.开始写后端和前端

这是以操作为第一位的设计方法,首先我们确认了一个操作,然后围绕这个操作把周边需要的东西建设好,这种方式当然可以架构出一个系统,甚至是一个好系统,但是偶尔会有些问题:

1.操作之间是会有关联,你的设计容易变成"2个操作要求第1个操作进行过",这种关系多起来你的系统就乱了

2.你的URL设计会缺乏一致性

3.操作通常被认为是有副作用(Side Effect)的,所以很少有人基于操作去设计缓存之类的东西

基于这些问题,我们的另一种方法是基于资源的角度来搞,但这个太难了我至今其实没想明白到底是怎么搞的,但基于资源会有一些好处:

1.各个资源虽然可能有关联,但依旧是能够简单地切掉这些关联导致相互独立的,所以不会有非常乱的耦合性

2.对资源的操作就这么几种,所以很容易设计一致的URL

3.我们明白对资源的读操作是无副作用的,所以能玩缓存

但其实现在99%说自己是REST的情况,就是改了个URL风格,用了用PUTPOST,根本没有明白REST是一个什么,也没有按REST的思想来指导设计

要说自己会REST,我觉得至少回答2个问题:

1.对于用户登录和用户退出这两个业务需求,REST指导下的架构和设计如何满足

2.批量的删除、修改、新增如何满足

它的优势或优点。

首先,REST规范:

"强调HTTP应当以资源为中心,并且规范了资源URI的风格;

"规范了HTTP请求动作(PUTPOST等)的使用,具有对应的语义;

遵循REST规范的Web应用将会获得下面好处:

"URL具有很强可读性的,具有自描述性;

"资源描述与视图的松耦合;

"可提供OpenAPI,便于第三方系统集成,提高互操作性;

"如果提供无状态的服务接口,可提高应用的水平扩展性;

下面,西安中软卓越的老师再详细说明一下REST。了解事物,分三步走:

【基本概念】

REST是一种软件架构模式。核心概念包括:

资源(Resource):在REST中,资源可以简单的理解为URI,表示一个网络实体。比如,/users/1/name,对应id=1的用户的属性name

既然资源是URI,就会具有以下特征:名词,代表一个资源;它对应唯一的一个资源,是资源的地址。

表现(Representation):是资源呈现出来的形式,比如上述URI返回的HTMLJSON,包括HTTP Header等;

【实践】

怎么用呢?不同的Server端框架提供了各种解决方案。比如JavaEE中的开箱即用的Spring-MVC

但实践过程中,你自然会碰到一些需要思考的问题:

1)如何定义资源:一般对应数据库实体(在传统的关系型数据库中)。

2)需要对HTTP协议更多的理解

URL格式:协议://域名/路径?查询#HASH,实际的一个HTTP请求,还会包括Header(含CookieMethod等)

资源的URI格式:协议://域名/路径,它只是URL的子集,表征一个资源实体。比如,http://a.com/users/1

恰当地理解和返回Http Status(状态码)。200=成功,404=资源不存在,500=服务器端错误等等。

3REST操作

一般资源操作只有新增、删除、查询、更新,对应HTTP协议中四类请求:POSTDELETEGETPUT。其中,后三个操作是幂等的。(什么是幂等?)

查询资源时,更多的参数,比如分页、排序、过滤条件,一般都会放在URL的查询部分(Query String)。

新增、更新资源,关于资源实体的内容,一般放在请求体(Request Body)中。

实际发送请求,还需要有动词,表示对该资源执行什么样的操作。那么超出这个范围的操作该如何扩展?

REST操作返回什么内容?对于删除、新增、更新等操作,通常是返回操作是否成功的标识;如果失败,需要返回错误代码和消息,方便客户端做进一步处理。如果是查询操作,通常包含实体或者实体列表。

在最佳实践中,应当还应该返回与此操作相关的其他操作。比如,查询得到实体的响应中,应包含该实体的删除、更新操作的地址。

请求和返回的Body,采用什么格式?常见的格式包括XML/JSON/HTML

作为一名开发人员,技术是立身的根本,是拴马桩的尊严;对于一个做教育机构,口碑如水是生命之源,是长盛不衰的根本。13年历经风雨依然昂首前行,未来的西安中软卓越同样会恪守初心,以技术立身,培养IT精英,捍卫教育本质。

 

本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

“简称中软卓越”,是中软国际教育科技股份有限公司是大型IT人才培训机构,是人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930