您好,欢迎访问三七文档
11-110RESTful架构理论课21-2什么是RESTREST(RepresentationalStateTransfer):表述性状态转移,分布式超媒体软件的一种架构风格。一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。基于使用HTTP、URI等现有的广泛流行的协议和标准,并由几个核心抽象概念支撑。对Web的本质回归:一种真实描述Web的方式,不被特定时期的特定应用程序概念歪曲。提供区分良好实践和糟糕实践的途径:判断特定实践是否与Web架构一致。31-3资源URI规范(RFC2396)指出:“资源可以是任何有标示的东西”;“并非所有的资源都是通过网络能够获取的”。任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个实物,也可以是一个抽象的概念。通常一个资源是某个可以存放在计算机上并体现为比特流的事物。在Web中,可以这样认为——资源是URI标示的东西。41-4表示资源和表示不是一码事。Web上获取的不是资源,而是资源的表示。对于给定的资源,可以有很多不同的表示。表示表示表示HTMLXMLFlashText资源表示标识符(URI)51-5状态在客户-服务端模式下,让客户端维护应用状态,并确保客户端向服务器发出的请求都包含理解请求所需的全部信息,而服务器不应该维护该状态。REST式解决方案是使用URI。每个概念上独立的资源都可使用单个URI,不希望通过Cookie或隐藏在有效负载的参数来提供额外信息。例:查看john在某网站2008-10-10的所有文档资料约束和风格Url表示资源CRUD操作状态表述转移无状态服务Http状态码、Cache控制ProxyREST核心是构架以资源为核心的模型71-7REST关键原则为所有资源定义ID将所有资源链接在一起使用标准方法资源多重表示无状态通信81-8为所有资源定义ID思考一下人们构建的系统,通常会找到一系列值得被标识的关键抽象。每个资源都应该是可标识的,都应该拥有一个明显的ID——在Web中,代表ID的统一概念是:URI。URI构成了一个全局命名空间,使用URI标识你的关键资源意味着它们获得了一个唯一、全局的ID。举例如下:://example.com/orders/2007/10/776654://example.com/processes/salary-increase-234注意:以上URI都是对一个Web中的资源的标识。91-9为所有资源定义ID://example.com/products?color=green注意:以上两个URI不是对一个资源的标识,而是对一类资源集合的标识。由于资源集合自身也是资源,也可以被标识。总结:无论Web中的资源代表单一数据项、数据项集合、虚拟亦或实际的对象还是计算结果等,都可以使用URI标识。101-10将所有资源链接在一起注意:以上xml片段中有两个超链接,通过超链接可以将更多的资源链接在于一起。使用URI表示链接的优势之处在于,链接可以指向由不同应用、不同服务器提供的资源——因为URI命名规范是全球标准,构成Web的所有资源都可以互相通信。总结:任何可能的情况下,使用链接指引可以被标识的资源111-11使用标准方法常用的HTTP标准方法是GET/POST。除此之外,标准方法集合中还有PUT、DELETE、HEAD、OPTIONS等八种方法121-12使用标准方法在实现REST原则的架构中,可以通过组成HTTP应用协议的通用接口访问服务程序注意:以上通过使用标准方法映射服务程序中的特定操作131-13使用标准方法总结:为使客户端程序能与Web中的资源相互协作,资源应该正确地实现默认的应用协议(即HTTP协议),并使用协议标准的GET、PUT、POST和DELETE方法。141-14资源多重表示HTTP采取的方式是允许数据处理和操作调用之间关系分离的。如果客户程序知道如何处理一种特定的数据格式,那就可以与所有提供这种表述格式的资源交互。举例如下:以上HTTP/GET请求的结果是xml格式表示的客户信息以上HTTP/GET请求的结果是Vcard格式表示的客户信息总结:尽可能针对不同的需求提供资源多重表示151-15无状态通信REST要求状态要么被放入资源状态中,要么保存在客户端上。服务器端不能保持除了单次请求之外的,任何与其通信的客户端的通信状态。这样做的最直接的理由就是可伸缩性——如果服务器需要保持客户端状态,那么大量的客户端交互会严重影响服务器的内存可用空间无状态约束使服务器的变化对客户端是不可见的,因为在两次连续的请求中,客户端并不依赖于同一台服务器。总结:要做到无状态通信往往需要一些重新设计——不能简单地将一些session状态绑缚在URI上。161-16什么是RESTfulRESTful:符合REST约束风格和原则的应用程序或设计就是RESTful举例:/emp/1HTTPGET查询id=1的emp/emp/1HTTPDELETE删除id=1的emp/emp/1HTTPPUT更新emp/emp/addHTTPPOST新增emp171-17Spring对RESTful的支持Spring是一个得到广泛应用的JavaEE框架,它在版本3以后就增加了对RESTful开发的支持。REST风格支持被无缝整合到Spring的MVC层,它可以很容易应用到使用Spring构建的应用中。SpringRESTful主要特性如下:@RequestMapping和@PathVariable注解,支持资源标识和URL映射ContentNegotiatingViewResolver支持为不同的MIME/内容类型使用不同的表示方式使用相似的编程模型无缝地整合到原始的MVC层181-18Spring对RESTful的支持利用@RequestMapping注解指定要处理请求的URI模板和HTTP请求的动作类型利用@PathVariable注解将URI请求模板中的变量映射到处理方法参数上举例:@RequestMapping(value=/{id},method=RequestMethod.GET)publicStringtoUpdate(@PathVariable(id)Integerid,Modelmodel){//处理代码}191-19@RequestMapping应用格式@RequestMapping(value=“/{id}”,method=RequestMethod.GET)//查询操作@RequestMapping(value=“/{id}”,method=RequestMethod.POST)//新增操作@RequestMapping(value=“/{id}”,method=RequestMethod.DELETE)//删除操作@RequestMapping(value=“/{id}”,method=RequestMethod.PUT)//更新操作注意:form标签不支持提交DELETE和PUT请求,解决方案如下:1)利用SpringMVC生成一个hidden的_method=put,并于web.xml中的HiddenHttpMethodFilter配合使用,在服务端将post请求改为put请求2)可以利用AJAX在客户端发出PUT、DELETE动作的请求201-20总结REST的资源、表示和状态的概念REST关键原则RESTful概念Spring对RESTful支持
本文标题:RESTful架构
链接地址:https://www.777doc.com/doc-2855264 .html