REST与面向资源的Web开发-深刻理解Web的架构

1.什么是REST

◆Representational State Transfer(表述性状态转移)
◆来自Roy Fielding的博士论文:
  《Architectural Styles and the Design of
  Network-based Software    Architectures》
  (架构风格与基于网络的软件架构设计)
◆一种架构风格
  ▲比具体的架构更为抽象
  ▲类比:接口-实现 或 类-实例

◆Web之所以取得成功的技术架构因素总结
◆HTTP 1.1等Web标准设计的指导原理
  ▲新的Web标准的设计必须符合REST的要求,
   否则整个Web的架构会因为严重的内在矛盾而  崩溃
◆HTTP 1.1的设计是用来为实现REST风格的架构服务的

◆Web服务器上任何一个可命名的抽象概念
  ▲资源是抽象的概念
   -不只能代表服务器上的一个文件、数据库中的一张表等等很具体东西
   -要多抽象有多抽象,只要想象力允许
◆由一个唯一的URI来标识
◆以名词为核心来组织
◆类比:面向对象编程中的类

2.什么是表述

◆GET请求的响应中包含的是资源的表述
◆资源的表述反映了资源的当前状态
◆客户端可以修改资源的表述,并通过POST/PUT请求发送到服务器
  ▲客户端通过修改资源的表述,来间接修改资源的状态

◆资源的表述可以有多种格式
  html
  xml
  json
  ......

3.什么是面向资源
◆Web服务器由大量离散的资源组成
◆每个资源有自己的状态
◆针对每个资源只能执行一组有限的操作
  ▲通过HTTP 1.1的标准方法来对资源进行操作
   -GET/POST/PUT/DELETE/HEAD/OPTION/TRACE
  ▲HTTP 1.1定义了操作资源的统一接口
◆资源之间通过表述中的超链接相互关联

4.Struts2中的REST开发
◆首先定义资源,每个资源对应一个URI,开发一个Controller
◆每一个Controller有7个标准的action方法
◆可以实现额外的action方法,但是必须与操作此资源相关
◆发现有7个标准的action方法无法实现的功能,应再定义一个新的资源

◆URI的格式
  http://www.xxx.com/books
  http://www.xxx.com/books/123
  URI中最好用复数
◆客户端请求某种特殊的表述格式用URI+后缀表示
  http://www.xxx.com/books.xml
  http://www.xxx.com/books/123.json

◆7个标准的action方法与HTTP请求的对应关系:
  GET /books → index
  GET /books/123 → show
  POST /books → create
  PUT /books/123 → update
  DELETE /books/123 → destroy
  GET /books/new → editNew
  GET /books/123/edit → edit

◆如何在HTML表单中模拟PUT/DELETE请求
  <@s.hidden name="_method" value="put"/>

5.REST开发的优点
◆简单、规范
◆对搜索引擎更友好
◆对Ajax支持的更好
◆可以充分利用浏览器端的缓存

参考资料
《架构风格与基于网络的软件架构设计》
RFC 2616(HTTP/1.1)
RFC 2617(HTTP Authentication)
《RESTful Web Services》中文版
《Struts 2.1权威指南》第12章






你可能感兴趣的:(编程,Web,json,Ajax,REST)