分享

RESTful 架构以及 RESTful API开发

 TestOps云层 2021-06-22

时间主题
11.06(周二)20:00 讲师养成之吸睛PPT的写成
11.07(周三)20:00RESTful架构及RESTful API开发

在周三的测试运维试听课程中,芒果给大家介绍了RESTful架构以及RESTful API开发-Django REST Framework,这里我们来做个小总结。

什么是REST
什么是REST?休息一下马上回来?什么是RESTful 好好休息的?

当然并不是这样,REST是指Representational State Transfer的缩写,但是这样一样不好理解,是因为少了一个主语Resource。
REST完整的写法应该是( Resource ) Representational State Transfer指的是资源的表现形式以某种方式进行状态转移。

我们分别来看看这几个概念:
Resource 资源:所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。
Representational 表现形式:资源是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。比如,图片可以用JPG格式表现,也可以用PNG格式表现。
State Transfer 状态转移:访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

这里另外再补充一个概念:
要让网络上的一个实体成为资源,要求这个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。URI既可以看成是资源的地址,也可以看成是资源的名称。

RESTful架构

那么什么又是RESTful架构呢?

如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

通过上面一段描述我们可以知道要符合REST的约束条件和原则,至少要符合以下规则:

每一个URI代表一种资源;

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

客户端对服务器端资源进行操作,实现"表现层状态转化"。

这里的客户端对服务器的操作要求遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。

接口应该使用标准的HTTP方法,常用GET、POST、PUT、DELETE。

它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

RESTful API

由于现在前端系统的复杂多样性(手机、平板、桌面电脑、其他专用设备......),导致现在系统需要有一种统一的机制,方便不同的前端设备与后端进行通信。

而 RESTful 可以通过一套统一的接口为 Web,iOS和Android提供服务,不需要有显式的前端,只需要一套提供服务的接口。

作为一套比较成熟的互联网应用程序的API设计理论,RESTful API是目前最流行的API设计方式。

RESTful API开发一般需要重点关注以下几点:

URL 设计

动词 + 宾语:RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。动词通常就是刚刚提到的HTTP 方法,对应 CRUD 操作。

宾语必须是名词:宾语就是 API 的 URL,是 HTTP 动词作用的对象。它应该是名词,不能是动词。比如,/articles这个 URL 就是正确的,而下面的 URL 不是名词,所以都是错误的。

复数 URL:尽量使用复数的URL。

动词的覆盖:有些客户端只能使用GET和POST这两种方法。服务器必须接受POST模拟其他方法(比如PUT、DELETE)。这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖POST方法。

避免多级 URL:一般常见操作都是对于一个集合进行,所以为了统一起见,建议都使用复数 URL。

后续的啰啰嗦嗦

当然除了课程内容除了这些基本的介绍,芒果还给大家介绍了,关于带大家学习 Python 的 web 项目的 RESTful API开发框架 - Django REST Framework。带大家一起实践了一把符合REST架构的API到底是怎么具体实现的

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多