• 1. Rest框架及实践
  • 2. 内容概要Rest概述 Rest的设计概念及准则 Rest的优点 Rest的服务框架Restlet2.0
  • 3. 了解HTTPHTTP协议的形象理解: 信封格式有严格标准,并不关心里面内容。客户端服务器响应请求
  • 4. HTTP的请求方法(method):表示客户端希望服务器如何处理该信封,有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八个方法; 路径(path):请求链接里主机名后面部分,即信封上的地址; 请求报头(request headers):一组起元数据作用的键值对,类似信封上贴的标签信息。HTTP除定义了一套标准报头外,程序也可以自己定义报头; 实体主体(entity-body):也称作文档或表示,即信封里的文档。一般情况下,请求实体主体可为空。
  • 5. HTTP报头标准报头 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、WWW-Authenticate Date、Cache-Control 非标准报头 Cookie、Set-Cookie、X-WSSE 自定义报头 不重新发明已存在的报头 不将应该放在实体主体里的信息放进报头 命名遵循惯例,名称以“X-”开头
  • 6. HTTP响应代码 状态码(3位数字)分类 1xx:通知——仅在与HTTP服务器沟通时使用 2xx:成功——成功收到、理解和接受动作 200(“OK”)、201(“Created”)、204(“No Content”) 3xx:重定向——为完成请求,必须进一步采取措施 301(“Moved Permanently”)、303(“See Other”)、304(“Not Modified”)、307(“Temporary Redirect”) 4xx:客户端错误——请求包含错误的语法或不能完成 400(“Bad Request”)、401(“Unauthorized”)、403(“Forbidden”)、404(“Not Found”)、405(“Method Not Allowed”)、406(“Not Acceptable”) 、409(“Conflict”)、410(“Gone”) 5xx:服务器端错误——服务器不能完成明显合理的请求 500(“Internal Server Error”)、503(“Service Unavailable”)
  • 7. URI解析URI(Uniform Resource Identifier):通用资源标识符,它被设计充当可用位置和持久名称。可为定位器、名称,或两者兼具,取决于标识符分配中的持久性和命名机构对其关注程度。不论在哪里都可以对URI作出一致的解释,通常没有必要刻意区分它们。 语法规则:大致指向一个层次空间,协议是树根,从左往右每部分是前部分的分支。 例:http:// example.net /site/page ? name=张三 # photo 方案 域名 路径 查询 片段 路径:并非一定要采用层次机构,可根据应用程序模型定制路径结构。 例: http://del.icio.us / john / owl 用户名 标记 查询:URI中非层次部分,通常后台数据库应用程序要使用它。 片段:用于标示下一级资源,只在客户端有效。浏览器HTML中常对应页面锚点。
  • 8. URI空间的实现及维护“优秀的URI不会改变”——Tim Berners-Lee 最大限度地延长URI生命周期的保障: 1.独立于技术 2.层次结构和集合 3.末尾的斜杠和位置无关 最大限度降低修改URI造成的负面影响: 1.永久性重定向资源 2.暂时重定向资源 3.不应该使用的重定向方法 4.服务器端重定向
  • 9. 什么是Rest (Representational State Transfer)中文俗称:表述性状态转移,是分布式网络系统的一种设计模式,源自2000年Roy Thomas Fielding的博士论文; Rest不是标准规范,是一种设计模式; 针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可扩展性。 Rest使用标准: HTTP URL XML/HTML/GIF/JPEG/etc. (Resource Representations) text/xml, text/html, image/gif, image/jpeg, etc. (Resource Types, MIME Types)
  • 10. 论文摘要 堪称Web架构设计领域的“圣经”中文版下载
  • 11. 为什么叫RestResourceClienthttp://www.example.com/items/123123.htmlFuel requirements Maintenance schedule ...客户端通过一个URL来请求资源,返回的并不是资源,而是资源的一种特定表现形式(该图的表现形式是HTML文件)。
  • 12. Rest的Web Service设计方式Web ServerHTTP POSTURL 3Item (HTML/XML)HTTP GET requestURL 1HTTP responseURL to submitted ItemItems ListItem InfoAdd ItemHTTP responseResponse (HTML/XML doc)HTTP responseResponse (HTML/XML doc)HTTP GET requestURL 2
  • 13. Rest资源设计为每一个请求都创建一个资源 通过URL来识别资源 返回的数据格式(XML):
  • 14. Rest的设计概念及准则网络上的所有事物都被抽象为资源(Resource); 每个资源对应一个唯一的资源标识符(resource identifier); 通过通用的连接器接口(generic connector interface )对资源进行操作; 对资源的操作都是无状态性的(Stateless); 对资源的各种操作都不会改变资源标识。
  • 15. Rest的优点可以利用缓存Cache来提高响应速度 通讯本身的无状态性可以让不同的服务器处理一系列请求中的不同请求,提高服务器的扩展性 浏览器即可做客户端,简化软件开发的需求 相对于其他叠加的HTTP协议之上的机制,Rest的软件依赖性更小 不需要额外的资源发现机制 在软件技术演进中的长期的兼容性更好
  • 16. REST式服务框架Restlet2.0
  • 17. 轻量级框架RestletREST系统的轻量级解决方案,建立REST概念与Java类之间的映射。 不区分客户端与服务端的差异,统用一套APIs。 包括Restlet API和Noelios Restlet Engine(NRE)两部分,NRE是对API的一种参考实现。 提供Servlet适配器,Restlet应用可部署到Servlet容器,并分发URI请求。 隐藏低层信息(原始HTTP报头),简化请求映射。 引入Component、Applications和VirtualHosts等概念,便利系统整合、应用部署与测试。17
  • 18. Restlet的层次结构18
  • 19. Restlet系统设计依据ROA(面向资源的架构)设计原则,对资源类和URIs的设计 举例社会性书签应用的Restlet架构 19
  • 20. Restlet对资源请求的处理在Restlet框架中,服务器连接的标准响应由Resource的实例对象最终处理。一个Resource负责声明支持的表现方式列表和实现你想要实现的Rest方法。 GET 获取资源 PUT 更新资源 POST 添加资源 DELETE 删除资源 每一个请求的响应都由一个专门的Resource实例处理,所以不必担心这些方法的线程安全。 20
  • 21. 部署应用到Servlet容器(1)正常创建Servlet应用,修改Web.xml,用Restlet的适配器接受请求21
  • 22. 部署应用到Servlet容器(2)Application的createInboundRoot方法中建立路由,将资源类与URI模板之间建立起清晰而直观的映射关系22
  • 23. 部署应用到Servlet容器(3)实现继承自Resource的资源类,在构造方法中依据URI参数决定表现形式,并在表示方法中显示相应的内容 23
  • 24. 部署应用到Servlet容器(4)获取资源 24
  • 25. 部署应用到Servlet容器(5)添加一个资源 25
  • 26. 部署应用到Servlet容器(6)更新一个资源 26
  • 27. 部署应用到Servlet容器(7)删除一个资源 27
  • 28. 作为单独的Java应用运行(1)创建一个主类,建立一个新的HTTP服务器监听端口,并委托所有的请求给指定Restlet应用
  • 29. 作为单独的Java应用运行(2)
  • 30. 相关资料http://www.infoq.com/cn/articles/rest-introduction http://www.blogjava.net/Jack2007/archive/2008/10/07/232854.html  www.restlet.org http://ajaxcn.javaeye.com/category/64734
  • 31. 谢谢!