大牛带你深入讲解REST风格的架构:什么是REST?及REST设计原则
在第前面,我们介绍了Web服务。其中Web服务又可以分为“大”Web服务及RESTful Web服务。
本章将深入讨论RESTful Web服务及其架构风格。
(资料图片)
什么是REST随着互联网应用、Cloud Native、云计算的兴起,越来越多的应用采用了以HTTP为主的网络通信特别是RESTful(REST风格)的Web服务。RESTful Web服务所提供的API也成为REST API,这类API具有平台无关性、语言无关性等特点,在Cloud Native、微服务等架构中作为主要的通信协议。
那么到底什么样的HTTP算是REST?
一说到REST,大家都耳熟能详,很多人的第一反应就是认为这是前端请求后台的一种通信方式。甚至有些人将REST和RPC混为一谈,认为两者都是基于HTTP的类似的东西。实际上,很少人能详细讲述REST所提出的各个约束、风格特点以及如何开始搭建REST服务。
表述性状态转移(REpresentation State Transfer,REST)描述了一个架构样式的网络系统,比如Web应用程序。它首次出现在2000年RoyFielding的博士论文Architectural Styles and the Design of Network-basedSoftware Architectures中。Roy Fielding还是HTTP规范的主要编写者之一,也是Apache HTTP服务器项目的共同创立者。所以这篇文章一发表,就引起了极大的反响。很多公司或者组织如雨后春笋般宣称自己的应用或者服务实现了REST API。但该论文实际上只是描述了一种架构风格,并未对具体的实现做出规范。所以社会上,各大厂商不免存在浑水摸鱼或者误用、滥用REST。所以在这种背景下,Roy Fielding不得不再次发文做了澄清,坦言了他的失望,并对SocialSite REST API提出了批评。同时他还指出,除非应用状态引擎是超文本驱动的,否则它就不是REST或REST API。据此,他给出了REST API应该具备的条件。
·REST API不应该依赖于任何通信协议,尽管要成功映射到某个协议可能会依赖于元数据的可用性、所选的方法等。·REST API不应该包含对通信协议的任何改动,除非是补充或确定标准协议中未规定的部分。
·REST API应该将大部分的描述工作放在定义用于表示资源和驱动应用状态的媒体类型上,或定义现有标准媒体类型的扩展关系名和(或)支持超文本的标记。
·REST API绝不应该定义一个固定的资源名或层次结构(客户端和服务器之间的明显耦合)。
·REST API永远也不应该有那些会影响客户端的“类型化”资源。
·REST API不应该要求有先验知识(Prior Knowledge),除了初始URI和适合目标用户的一组标准化的媒体类型(即,它能被任何潜在使用该API的客户端理解)。
REST并非标准,而是一种开发Web应用的架构风格,可以将其理解为一种设计模式。REST基于HTTP、URI以及XML这些现有的广泛流行的协议和标准,伴随着REST的应用,HTTP得到了更加正确的使用。
REST设计原则REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是REST。
相较于基于SOAP和WSDL的Web服务,REST模式提供了更为简洁的实现方案。RESTful Web服务是松耦合的,这特别适用于为客户创建在互联网传播的轻量级的Web服务API。REST应用是围绕“资源表述的转移”为中心来做请求和响应的。数据和功能均被视为资源,并使用统一的资源标识符(URI)来访问资源。网页里面的链接就是典型的URI。该资源由文档表述,并通过使用一组简单的、定义明确的操作来执行。
例如,一个REST资源可能是一个城市当前的天气情况。该资源的表述可能是一个XML文档、图像文件或HTML页面。客户端可以检索特定表述,通过更新其数据来修改资源,或者完全删除该资源。
目前,越来越多的Web服务开始采用REST风格设计和实现,真实世界中比较著名的REST服务包括:Google Ajax搜索API、AmazonSimple Storage Service(Amazon S3)等。
基于REST的Web服务遵循一些基本的设计原则,使得REST应用更加简单、轻量,开发速度也更快。这些原则包括以下4点。
·通过URI来标识资源。系统中的每一个对象或资源都可以通过一个唯一的URI来进行寻址,URI的结构应该简单、可预测且易于理解,比如定义目录结构式的URI。
·统一接口。以遵循RFC-2616所定义的协议的方式显式地使用HTTP方法,建立创建、检索、更新和删除操作与HTTP方法之间的一对一映射。
·若要在服务器上创建资源,应该使用POST方法。·若要检索某个资源,应该使用GET方法。
·若要更新或者添加资源,应该使用PUT方法。
·若要删除某个资源,应该使用DELETE方法。
·资源多重表述。URI所访问的每个资源都可以使用不同的形式加以表示(比如XML或者JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与MIME类型)来选择合适的数据格式,最小化彼此之间的数据耦合。在REST的世界中,资源即状态,而互联网就是一个巨大的状态机,每个网页是其一个状态;URI是状态的表述;REST风格的应用则是从一个状态迁移到下一个状态的状态转移过程。早期的互联网只有静态页面,通过超链接在静态网页之间浏览跳转的模式就是一种典型的状态转移过程。也就是说,早期的互联网就是天然的REST。
·无状态。对服务器的请求应该是无状态的,完整、独立的请求不要求服务器在处理请求时检索任何类型的应用程序上下文或状态。无状态约束使服务器的变化对客户端是不可见的,因为在两次连续的请求中,客户端并不依赖于同一台服务器。一个客户端从某台服务器上收到一份包含链接的文档,当它要做一些处理时,这台服务器宕机了,可能是硬盘坏掉而被拿去修理,也可能是软件需要升级重启——如果这个客户端访问了从这台服务器接收的链接,它不会察觉到后台的服务器已经改变了。
通过超链接实现有状态交互,即请求消息是自包含的(每次交互都包含完整的信息),有多种技术实现了不同请求间状态信息的传输,例如URI、Cookies和隐藏表单字段等,状态可以嵌入应答消息里,这样一来状态在接下来的交互中仍然有效。REST风格应用可以实现交互,但它却天然地具有服务器无状态的特征。在状态迁移的过程中,服务器不需要记录任何Session,所有的状态都通过URI的形式记录在了客户端。更准确地说,这里的无状态服务器,是指服务器不保存会话状态,而资源本身则是天然的状态,通常是需要被保存的。这里的无状态服务器均指无会话状态服务器。
表8-1是一个HTTP请求方法在RESTful Web服务中的典型应用。
表8-1 HTTP请求方法在RESTful Web服务中的典型应用
标签:
推荐文章
- 深圳2021年棚户区改造累计开工6530套 获得督查激励
- 研究人员最新发现 单个细胞可同时处理成百上千个信号
- 长期暴露在光照下性能退化 科学家发现钙钛矿太阳能电池最大缺陷
- 陆军第73集团军某旅 创新升级模拟训练器材
- 陆军炮兵防空兵学院 毕业学员综合战术演习现地备课工作圆满完成
- 宁夏启动双百科技支撑行动 构建高水平产业创新体系
- 区域特色产业转型升级 四川屏山以“3+”模式推进科技创新工作
- 国内首颗以茶叶冠名遥感卫星 安溪铁观音一号发射成功
- 激发创新动能促进产业发展 无锡滨湖走出产业转型“绿色”路
- 走近网瘾少年们:他们沉迷网络的病根何在?
- 节后第一天北京白天晴或多云利于出行 夜间起秋雨或再上线
- 走访抗美援朝纪念馆:长津湖的寒冷,与战斗一样残酷
- 绥化全域低风险!黑龙江绥化北林区一地调整为低风险
- 农业农村部:确保秋粮丰收到手、明年夏季粮油播种
- 中国故事丨“沉浸式”盘点今年的教育好声音!
- 升旗、巡岛、护航标、写日志,他们一生守护一座岛
- 他从一窍不通的“门外汉”,到重装空投“兵专家”
- 获2021年诺奖的蛋白,结构由中国学者率先解析
- “双减”后首个长假:亲子游、研学游需求集中释放
- 天山脚下,触摸丝路发展新脉动
- 且看新疆展新颜
- 《山海情》里“凌教授”的巨菌草丰收啦
- “双减”出台两个月,组合拳如何直击减负难点?
- IP类城市缘何吸引力强?玩法创新带动游客年轻化
- 面对婚姻,“互联网世代”的年轻人在忧虑什么?
- 沙害是自然界的恶魔,而他是荒沙碱滩的征服者
- “辱华车贴”商家及客服被行拘,处罚要不放过每一环
- 网游新政下,未成年人防沉迷的“主战场”在哪?
- 160万骑手疑似“被个体户”?平台不能当甩手掌柜
- 报告显示:这个国庆假期,粤川浙桂赣旅游热度最高
- 陈毅元帅长子忆父亲叮嘱:你们自己学习要好,就可以做很多事儿
- 北京国庆7天接待游客超861万人次 冬奥线路受青睐
- 从1.3万元降到700元,起诉书揭秘心脏支架“玄机”
- 都市小资还是潮流乐享?花草茶市场呈爆发性增长
- 国庆主题花坛持续展摆至重阳节
- 警方查处故宫周边各类违法人员12人
- 云南保山:170公里边境线,4000余人日夜值守
- 线上教学模式被盯上,网络付费刷课形成灰色产业链
- 全国模范法官周淑琴:为乡村群众点燃法治明灯
- 嘉陵江出现有记录以来最强秋汛
- 中国科技人才大数据:广东总量第一,“北上”这类人才多
- 神经科学“罗塞塔石碑”来了:迄今为止最完整的大脑细胞图谱
- 多地网友投诉遭遇旅游消费骗局,呼吁有关部门严查乱象
- 受南海热带低压影响 海南海口三港预计停运将持续到10日白天
- 农业农村部:确保秋粮丰收到手、明年夏季粮油播种
- 广州10月8日至20日对所有从省外来(返)穗人员实施核酸检测
- 辽宁省工信厅发布10月8日电力缺口橙色预警
- 受琼州海峡封航影响 10月7日、8日进出海南岛旅客列车停运
- 这场红色故事“云比拼”,穿越时空为我们指引方向
- 陕西支援14省份采暖季保供用煤3900万吨
- 汾河新绛段发生决口
- 看,生机勃勃的中国
- 百闻不如一见——北京大学留学生参访新疆
- 新疆霍尔果斯市2例无症状感染者新冠病毒均为德尔塔变异株
- 哈尔滨市南岗区爱达88小区将调整为低风险地区
- 国庆假期全国道路交通总体安全平稳有序
- 假期怎么过得这么快?国庆5.15亿人次出游,你咋过的?
- 国庆假期北京接待游客861.1万人次
- 山西平遥消防4天29次救援:拖着腿走路也要完成任务
- 新疆兵团可克达拉市:195名密接者已全部隔离医学观察
- 国庆假期中国预计发送旅客4.03亿人次
- 公安部交管局:国庆假期日均出动警力18万余人次,5位交警辅警牺牲
- 国庆假期中国国内旅游出游5.15亿人次
- 新疆哈密市巴里坤县发生4.3级地震 震源深度9千米
- 冷空气自西向东影响中国大部地区 气温将下降4℃至6℃
- 2021年MAGIC3上海市青少年三对三超级篮球赛落幕
- 国庆假期广西累计接待游客逾3611万人次 实现旅游消费272.41亿元
- 新疆伊犁州:妥善做好滞留旅客安置返回工作
- 新疆霍尔果斯无症状感染者新冠病毒属德尔塔变异株 未发现高度同源的基因组序列
- “数说”杭州无障碍改造:触摸城市“爱的厚度”
- 受南海热带低压影响广东将暂别高温天气
- 浙南沿海村村发展有妙招 搭乘共富快车打造“海上花园”
- 世界第一埋深高速公路隧道大峡谷隧道出口端斜井掘进完成
- 直径2米“面气球”亮相 山西首届“寿阳味道”美食大赛启幕
- 厦门同安区四区域调整为低风险 全市无中高风险地区
- 哥伦比亚遇上广州:洋茶人“云上”喫茶 传播中国茶“味道”
- 新疆兵团第四师可克达拉市1名无症状感染者为餐饮从业人员
- 中国国庆假期出行热:数字改变“关键小事”
- 添加陌生人为好友 内蒙古两女子被骗126万
- 南沙港铁路国庆假期不停工 力争今年年底开通
- 新疆霍尔果斯两例无症状感染者新冠病毒均属德尔塔变异株
- 哈尔滨一地风险等级调整为低风险
- 哈尔滨市学校有序恢复线下教学
- 受热带低压影响 琼州海峡北岸等待过海车辆排长龙
- 铁路迎返程高峰 西安局集团公司加开79趟高铁列车
- 铁路人国庆雨中巡查排险记:一身雨衣、一把铁锹保安全畅通
- 水能载物亦能“生金” 浙江遂昌山村以水为媒奔共富
- 科学拦峰错峰削峰 嘉陵江洪水过境重庆中心城区“有惊无险”
- 山西解除持续近90小时的暴雨四级应急响应
- 安徽黄山国庆假期迎客12万余人 旅游市场稳步复苏
- 从进“培训班”到看《长津湖》
- 厦门中高风险地区清零 撤除离厦通道查验点
- 济南趵突泉地下水位创1966年以来最高纪录
- 杭州“十一”假期后初中取消统一早读
资讯
- 大牛带你深入讲解REST风格的架构:什么是REST?及REST设计原则
- 夏威夷毛伊县方面表示,夏威夷野火造成的死亡人数升至93人。
- 雷雨、冰雹、大风、大暴雨!双预警齐发,贵州这些地方注意……
- 黑龙江拉滨线水毁铁路抢修完成 保运粮通道畅通
- 口腔中的“危险分子”与“原住民”,你分得清吗?丨科普时间
- 搅拌桩水灰比计算公式 水灰比计算公式
- 四川大学黑龙江录取分数线 四川大学黑龙江招生人数多少
- 郑眼看盘丨内外利空共振,股指回撤明显
- 计算机行业周报:信创下的华为链:软硬件+自动驾驶+鸿蒙4 回归与成长!
- 截至6月末 甘肃各项贷款余额2.73万亿元
- 东方仙缘什么时候出 公测上线时间预告
- 砂锅腐竹焖羊肉做法?