RESTful快速入门

一、概述

Representational State Transfer (REST) is a software architecture style consisting of guidelines and best practices for creating scalable web services. REST is a coordinated set of constraints applied to the design of components in a distributed hypermedia system that can lead to a more performant and maintainable architecture.

REST是一种软件架构风格,是创建可扩展web服务的指南和最佳实践。在分布式系统中提出一系列约束和规范,以创建高性能和可维护的架构。如果一个架构符合REST原则,就可以称它为RESTful架构。

二、概念

1、资源

所谓资源,就是网络上的一个实体,可以是一段文本、一张图片、一种服务等具体的存在。用URI(统一资源标识符)来指向资源,每种资源对应一个特定的URI。要想获取资源,访问该资源的URI即可。

2、表现层

网络实体(资源)可以有多种表现形式,其具体表现出来的形式,称为它的表现层。比如文本可以用txt格式表现,也可以使用HTML格式、XML格式、JSON格式表现。图片可以用JPG格式表现,也可以使用PNG格式表现。URI只代表资源的位置,它的表现形式应该在请求的头信息中指定。

3、状态转换

当客户端与服务器之间进行互动时,会涉及到数据和状态的变化。由于HTTP协议是一个无状态协议,客户端需要通过HTTP动作使服务器端发生状态转化。

三、约束

要想构建RESTful的架构,有以下几个约束:

  1. 使用客户端/服务器模型。
  2. 使用层次化的系统。
  3. 无状态。客户端在每次发送请求时都需要提供足够的信息。
  4. 可缓存。能够缓存请求,以尽量减少客户端和服务器之间的信息传输。
  5. 统一的接口。使用统一的接口来完成用户与服务之间以及各子系统之间的交互。

关于接口,有以下几个原则:

  1. 每个资源都拥有一个资源标识。
  2. 消息的自描述性。所传递的消息需要能够提供自身的足够信息。
  3. 资源的自描述性。所返回的资源需要能够描述自身,并提供足够的用于操作该资源的信息。
  4. HATEOAS。只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息。

四、设计原则

1、资源识别

REST中的API是以资源为中心,而不是以执行的动作为中心。通常所执行动作的对象被看成是系统中的资源。如果一个动作没有明确的操作对象,就需要考虑该动作产生了哪些影响或哪些状态发生了改变,发生变化的实体就是资源。

在抽象出资源的过程中,按照自顶向下的方式,首先识别出主要资源,然后识别主要资源的子资源,依次迭代。

判断一个资源定义是否合理,有以下几种方法:

  • 对资源的CRUD是否有意义。
  • 是否需要除CRUD之外的操作。
  • 资源是否被整体使用。

2、资源的URL

当标识出一个资源之后,需要为资源分配对应的URL。一个URL主要由几部分组成:

  • 协议,即HTTP或HTTPS。
  • 域名,尽量将API部署在专有域名下。如果API很简单,不会进一步扩展,也可以放在主域名下。
  • 相对路径,每个网址代表一种资源,所以只使用名词,而不使用动词。所用的名词通常与数据库对应,并且数据库通常都是记录的集合,所以API中的名词应该使用复数形式。如果API版本更迭,应该将API的版本号也放到URL中。
  • 请求参数,即由“?”开始,并由“&”连接的多个键值对组成的字符串。

对于返回的记录数量很多的场合,API应该提供参数,过滤返回结果:

  • ?Limit=10,指定返回记录的数量。
  • ?offset=10,指定返回记录的开始位置。
  • ?page=2&per_page=100,指定第几页,以及每页的记录数。
  • ?sortby=name&order=asc,指定返回结果按照哪个属性排序,以及排序的升降顺序。
  • ?type_id=1,指定过滤条件。

3、使用合适的动词

对资源的具体操作类型,由HTTP动词表示。

  • GET(SELECT),从服务器获取资源。
  • POST(CREATE),在服务器创建一个资源。
  • PUT(UPDATE),更新服务器上的资源(客户端提供更新后的完整资源)。
  • PATCH(UPDATE),更新服务器上的资源(客户端提供更新的属性)。
  • DELETE(DELETE),删除服务器上的资源。
  • HEAD,获取资源的元数据。
  • OPTIONS,获取关于资源的哪些属性是可以改变的信息。

()内表示与动词等价的数据库操作。

4、使用标准的状态码

服务器向客户端返回的状态码和提示信息,具体可参见HTTP响应码。如果状态码是4xx,就应该向客户端返回出错信息。通常返回的信息中将error作为键名,出错信息作为键值。

5、选择适当的表示结构

服务器返回的数据格式,应该尽量使用JSON,避免使用XML。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,430评论 0 19
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,135评论 25 707
  • 欢呼起来吧 愚笨的生灵 蝙蝠掠过天空 只留下一片沉寂 短促尖细的叫声 掺杂着稀薄的空气和风 把健康与宁静轻轻唤醒 ...
    绛洞花王阅读 238评论 9 5
  • 爱情有着各种各样的伪装,有如波涛汹涌的,也有细水长流的,有天崩地裂的,也有恬静安宁的,可是无论我们看过多少种爱情的...
    荏苒_追忆阅读 195评论 0 0