REST式架构及实践

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

REST式架构及实践研发中心-集市技术部吕昊REST究竟何物?REST(RepresentationalStateTransfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年RoyThomasFielding的博士论文。一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。基于使用HTTP、URI等现有的广泛流行的协议和标准,并由几个核心抽象概念支撑。对Web的本质回归:一种真实描述Web的方式,不被特定时期的特定应用程序概念歪曲。提供区分良好实践和糟糕实践的途径:判断特定实践是否与Web架构一致。2论文中文摘要堪称Web架构设计领域的“圣经”中文版下载3回顾WebWeb1.0核心组件HTTP(HypertextTransferProtocol):超文本传输协议。一种基于文档的轻量级网络协议,建立在可靠性和扩展性高的TCP/IP协议基础之上。URL(UniformResourceLocator):通用资源定位符,一种文档地址的表示方案,是Web1.0的关键。例:指定协议定位符,对应域名系统对应大部分文件系统层次结构HTML(HypertextMarkupLanguage):超文本标识语言,一种基于标签的简单文档格式,主要显示静态网页内容。5Web1.0-Web2.0的转变Web1.0的误区:对大多数用户而言,Web不过是一个只读文件仓库!Web2.0颠覆用户错误观念:Web不再是简单的文档仓库!Web是双向的!!重新审视Web作为全球信息空间的概念,Web2.0更加丰富的含义:“Web数据”和“平台化的Web”。底层基础设施未变化,真正的区别:使用基础设施的方式。网站就是Web服务,Web作为分布式编程平台具备极大的潜力。6细看HTTP与URIHTTP:信封里的文档HTTP协议的形象理解:信封格式有严格标准,不关心里面内容。客户端服务器响应请求HTTP请求方法(method):表示客户端希望服务器如何处理该信封。有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八个方法。路径(path):请求链接里主机名后面部分,即信封上的地址。请求报头(requestheaders):一组起元数据作用的键值对,类似信封上贴的标签信息。HTTP除定义了一套标准报头外,程序也可以自己定义报头。实体主体(entity-body):也称作文档或表示,即信封里的文档。一般情况下,请求实体主体可为空。9HTTP响应响应代码(responsecode):通知客户端请求成功或失败,以及如何处理信封里的内容。响应报头(responseheader):类似请求报头。实体主体(entity-body):同样是放在信封里的文档,但绝大多数情况它不会为空。10HTTP报头标准报头•Host、User-Agent、Accept、Allow、Accept-Charset、Accept-Encoding、Accept-Language、Range、If-Modified-Since、If-None-Match、Authorization•Content-Type、Content-Length、Content-Range、Location、Content-MD5、Content-Location、Content-Encoding、Content-Language、Accept-Ranges、Expires、Last-Modified、ETag、•Date、Cache-Control非标准报头•Cookie、Set-Cookie、X-WSSE自定义报头•不重新发明已存在的报头•不将应该放在实体主体里的信息放进报头•命名遵循惯例,名称以“X-”开头11HTTP响应代码状态码(3位数字)分类•1xx:通知——仅在与HTTP服务器沟通时使用•2xx:成功——成功收到、理解和接受动作•200(“OK”)、201(“Created”)、204(“NoContent”)•3xx:重定向——为完成请求,必须进一步采取措施•301(“MovedPermanently”)、303(“SeeOther”)、304(“NotModified”)、307(“TemporaryRedirect”)•4xx:客户端错误——请求包含错误的语法或不能完成•400(“BadRequest”)、401(“Unauthorized”)、403(“Forbidden”)、404(“NotFound”)、405(“MethodNotAllowed”)、406(“NotAcceptable”)、409(“Conflict”)、410(“Gone”)•5xx:服务器端错误——服务器不能完成明显合理的请求•500(“InternalServerError”)、503(“ServiceUnavailable”)12HTTP示例13URI=URL+URNURI(UniformResourceIdentifier):通用资源标识符,它被设计充当可用位置和持久名称。URL提供资源定位方法,依赖于命名和位置机制。URN(UniformResourceName)需要是全球惟一的,并且在资源不存在或不再可用时依然保持不变。URI可为定位器、名称,或两者兼具,取决于标识符分配中的持久性和命名机构对其关注程度。不论在哪里都可以对URI作出一致的解释,通常没有必要刻意区分它们。14解析URI语法规则:大致指向一个层次空间,协议是树根,从左往右每部分是前部分的分支。例:=张三#photo方案域名路径查询片段路径:并非一定要采用层次结构,可根据应用程序模型定制路径结构。例:某标记系统用户名标记查询:URI中非层次部分,通常后台数据库应用程序要使用它。片段:用于标示下一级资源,只在客户端有效。浏览器HTML中常对应页面锚点。15URI空间的实现及维护“优秀的URI不会改变”——TimBerners-Lee最大限度地延长URI生命周期的保障:1.独立于技术2.层次结构和集合3.末尾的斜杠和位置无关最大限度降低修改URI造成的负面影响:1.永久性重定向资源2.暂时重定向资源3.不应该使用的重定向方法4.服务器端重定向16REST抽象概念与设计原则资源URI规范(RFC2396)指出:“资源可以是任何有标示的东西”;“并非所有的资源都是通过网络能够获取的”。任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个实物,也可以是一个抽象的概念。通常一个资源是某个可以存放在计算机上并体现为比特流的事物。在Web中,可以这样认为——资源是URI标示的东西。18表示资源和表示不是一码事。Web上获取的不是资源,而是资源的表示。对于给定的资源,可以有很多不同的表示。19表示表示表示HTMLXMLFlashText资源表示标识符(URI)状态在客户-服务端模式下,让客户端维护应用状态,并确保服务端向服务器发出的请求都包含理解请求所需的全部信息,而服务器不应该维护该状态。REST式解决方案是使用URI。每个概念上独立的资源都可使用单个URI,不希望通过Cookie或隐藏在有效负载的参数来提供额外信息。例:查看john在某网站2008-10-10的所有文档资料设计准则网络上的所有事物都被抽象为资源每个资源对应一个唯一的资源标识URI通过HTTP协议方法作连接器对资源进行操作对资源的任何操作不改变资源标识URI所有的服务器操作都是无状态的21违背REST的恶果服务端必须维持状态难以对URI进行缓存应用部署难以水平扩展存在安全隐患数据与表象混杂无法准确表达与理解请求含义对不同客户端要分代码处理URI难以持久化暴露技术实现且易变更URI代码方法入侵URI不利于搜索引擎22Web架构的现状相互竞争的Web服务架构REST式面向资源的架构具备Web特征的服务:静态网站、许多未采用SOAP的只读Web服务、许多只读型Web应用等PRC式架构所有采用XML-RPC遗留协议的服务,几乎所有的SOAP服务REST-RPC混合架构大部分Web应用,大量采用MVC模式的Web应用24XML-RPC例子POST/rpcHTTP/1.1...?xmlversion=1.0?methodCallmethodNamegetApp/methodNameparamsparamvaluestring213/string/value/paramparams/methodCall25SOAP-RPC例子POSTsearch/beta2HTTP/1.1Host:api.google.comContent-Type:application/soap+xmlSOAPAction:urn:GoogleSearchAction?xmlversion=1.0encoding=UTF-8?soap:Envelopexmlns:soap=:Bodygs:doGoogleSearchxmlns:gs=urn:GoogleSearchqREST/q…/gs:doGoogleSearch/soup:Body/soap:Envelope26REST-RPC例子GETservices/rest?api_key=xxx&method=flickr.photos.search&tags=penguinHTTP/1.1Host:…GETmember/corporation/crpHome!ListByUserId.jspaHTTP/1.1Host:member.alisoft.com…27差别的形成尽管HTTP是共用的,但在两个问题上的做法不同Q1:客户端如何传递自己的意图到服务端,让它知道请求到底是获取、创建、修改或是删除数据?Q2:服务端如何知晓具体操作那些数据?根源:对Web的理解的不同,实际应当与Web的理念保持一致28方法信息(MethodInfomation)方式一:使用HTTP方法方式二:放到请求URI路径里方式三:放入实体主体或HTTP报头29作用域信息(ScopingInfomation)方式一:放到请求URI路径里方式二:放入实体主体30REST式架构——面向资源的架构ROA定义面向资源的架构(Resource-OrientedArchitecture,ROA)一个具体的REST式架构一种把实际问题转换成REST式Web服务的方法32ROA四个概念资源资源的名称(URI)资源的表示资源间的链接33资源举例某软件的1.0.3版某软件的最新版本某天发布到taobao上的第一件商品一张杭州旅游地图QC中某个项目的Bug列表某某公司04季度的营业额大于1024的最小素数某批三鹿奶粉的三聚氰胺含量检验结果陈冠希与张柏芝两人间的关系34URI与资源的关系URI既是资源的名称,也是资源的地址。一个资源必须至少有一个URI,而一个URI只能指示一个资源。任何两个资源不可能是同一个。两个不同的资源在某一时期可能指向同样的数据。同一资源具有多个URIs的虽然能让引用变得更加容易,但坏处是将产生“稀释效应”,客户端无法自动验证它们是指向同一个资源。35资源的表示对于一个本身就是一些数据项的资源,最容易想到的一个表示就是这些数据

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功