RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件. 它主要用于客户端和服务器交互类的软件. 可以使软件更简洁,更有层次,更易于实现缓存等机制
REST原则:
客户端和服务器之间的交互在请求之间是无状态的
分层系统
RESTful的关键定义可表示流程元素或资源的对象: 在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的
组合管理及流程绑定
RESTful与 RPCRPC 样式的 Web 服务客户端将一个装满数据的信封:包括方法和参数信息, 通过 HTTP 发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。每个对象都有自己独特的方法以及仅公开一个 URI 的 RPC 样式 Web 服务,URI 表示单个端点。它忽略 HTTP 的大部分特性且仅支持 POST 方法
RESTful Web 服务的Java框架Restlet
客户端和服务器都是组件, 组件通过连接器互相通信
该框架最重要的类是抽象类 Uniform 及其具体的子类 Restlet,该类的子类是专用类,比如 Application、Filter、Finder、Router 和 Route。这些子类能够一起处理验证、过滤、安全、数据转换以及将传入请求路由到相应资源等操作。Resource 类生成客户端的表示形式
RESTful Web 服务也是多层架构:数据存储层,数据访问层,业务层,表示层
RESTful APIRESTful:
URL定位资源,用HTTP动词(GET,POST,PUT,DELETE)描述操作RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式.由SERVER来提供前端来调用,前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端
RESTful API设计原则资源: 首先是弄清楚资源的概念,资源总是要通过一种载体来反应它的内容.JSON是现在最常用的资源表现形式
统一接口: RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,统一数据操作的接口
URI: 可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源.要获取这个资源访问它的URI就可以,因此URI就成了每一个资源的地址或识别符.一般的,每个资源至少有一个URI与之对应,最典型的URI就是URL
无状态:所有的资源都可以URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。
有状态和无状态的区别: 例如要查询员工工资的步骤 第一步:登录系统。 第二步:进入查询工资的页面。 第三步:搜索该员工。 第四步:点击姓名查看工资。 这样的操作流程就是有状态的,查询工资的每一个步骤都依赖于前一个步骤,只要前置操作不成功, 后续操作就无法执行。如果输入一个URL就可以得到指定员工的工资,则这种情况就是无状态的, 因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个URL与之 对应可以通过HTTP中的GET方法得到资源,这就是典型的RESTful风格。 RESTful API设计规范URI语法
URI=scheme"://"authority"http://www.likecs.com/"path["?"query]["#"fragment] - scheme:指底层用的协议:http,https,ftp - host:服务器的IP地址或者域名 - port:端口,http中默认80 - path:访问资源的路径,就是各种web 框架中定义的route路由 - query:为发送给服务器的参数 - fragment:锚点,定位到页面的资源,锚点为资源id资源路径: rest资源的定义,即URL的定义,是最重要的;要设计出优雅的、易读的rest接口
URL中不能有动词: 在Restful架构中,每个网址代表的是一种资源,所以网址中不能有动词,只能有名词,动词由HTTP的 get、post、put、delete 四种方法来表示