sparksustc
发表于: 2012/12/4 17:59 引用 回复 只看该作者 1# TOP
江湖豪侠
性别: 男
积分:1517
阅读权限:954
帖子: 195
加入时间: 2010/8/7
最后登录: 2019/11/5

 2年前开发项目时写的,留此存照。希望对新手有所帮助。





关键词 wojilu开发 修改tag
sparksustc
发表于: 2012/12/4 18:00 引用 回复 只看该作者 2# TOP
江湖豪侠
性别: 男
积分:1517
阅读权限:954
帖子: 195
加入时间: 2010/8/7
最后登录: 2019/11/5

 点击图片可以看大图。

掷鸡蛋者
发表于: 2012/12/4 19:11 引用 回复 只看该作者 3# TOP
管理员
性别: 男
积分:52191
阅读权限:43393
帖子: 8322
加入时间: 2010/4/29
最后登录: 2020/8/4

感谢分享

而死,不默而生
weipengyang
发表于: 2012/12/4 20:28 引用 回复 只看该作者 4# TOP
江湖新秀
性别: 男
积分:105
阅读权限:63
帖子: 15
加入时间: 2011/6/11
最后登录: 2019/1/4

 我记录框架支不支持发布rest服务呀

掷鸡蛋者
发表于: 2012/12/4 20:39 引用 回复 只看该作者 5# TOP
管理员
性别: 男
积分:52191
阅读权限:43393
帖子: 8322
加入时间: 2010/4/29
最后登录: 2020/8/4

这个怎么说呢,现在是没有集成的快捷工具,但你直接将对象转成json,然后echoJson()到客户端,一样是可以的,我做过,绝对没问题。

将来会提供一个 wojilu API 这样类似的框架级别的 RESTfull 工具,肯定会提供,原因是因为,wojilu从一开始就对RESTfull有明确的意识。

而死,不默而生
sparksustc
发表于: 2012/12/4 21:01 引用 回复 只看该作者 6# TOP
江湖豪侠
性别: 男
积分:1517
阅读权限:954
帖子: 195
加入时间: 2010/8/7
最后登录: 2019/11/5

 

REST
维基百科,自由的百科全书

表征状态转移(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAPXML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

目录  [隐藏
[编辑]宗旨

REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移(Representational State Transfer)。

这一观点不是凭空臆造的,而是通过观察当前Web互联网的运作方式而抽象出来的。Roy Fielding 认为,

设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变。
[编辑]要点及标准

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

  • 资源是由URI来指定。
  • 对资源的操作包括获取、修改、创建和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。
[编辑]REST的要求
  • 客户端和服务器结构
  • 连接协议具有无状态性
  • 能够利用Cache机制增进性能
  • 层次化的系统
  • 随需代码 - Javascript (可选)
[编辑]关于状态

应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。

[编辑]RESTful Web 服务

RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:

  • URI,比如:http://example.com/resources/。
  • Web服务接受与返回的互联网媒体类型,比如:JSONXML ,YAML 等。
  • Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

该表列出了在实现RESTful Web 服务时HTTP请求方法的典型用途。

HTTP 请求方法在RESTful Web 服务中的典型应用[1]
资源GETPUTPOSTDELETE
一组资源的URI,比如http://example.com/resources/列出 URI,以及该资源组中每个资源的详细信息(后者可选)。使用给定的一组资源替换当前整组资源。在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。删除 整组资源。
单个资源的URI,比如http://example.com/resources/142获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等)替换/创建 指定的资源。并将其追加到相应的资源组中。把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。删除 指定的元素。

PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对服务器端有修改,因此当然也是幂等的)。

不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准[2]。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。

[编辑]实现举例

例如,一个简单的网络商店应用,

列举所有商品,

GET http://www.store.com/products

呈现某一件商品,

GET http://www.store.com/product/12345

下单购买,

POST http://www.store.com/order
<purchase-order>
  <item> ... </item>
</purchase-order>
[编辑]REST的优点
  • 可以利用缓存Cache来提高响应速度
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好
[编辑]实现[编辑]参考资料
  1. ^ Richardson, Leonard; Ruby, Sam, RESTful Web Services, O'Reilly. 2007 ((May 8, 2007)), ISBN 0596529260
  2. ^ Elkstein, M. What is REST?. Retrieved on 2009-07-04.
sparksustc
发表于: 2012/12/4 21:18 引用 回复 只看该作者 7# TOP
江湖豪侠
性别: 男
积分:1517
阅读权限:954
帖子: 195
加入时间: 2010/8/7
最后登录: 2019/11/5

 

REST(Representational State Transfer)最早是在2000年由美国加州大学的Roy Fielding在毕业论文 中提出的。如果说Petri网创始人的想法在学术界得到追捧,那么REST这个想法的确在工业界引起了一起狂大的热潮。REST使得人们重新开始思考服务设计的原则和方法。在这片短文里,我将简单讲述一些RESTful风格服务的设计原则。

 

REST定义了一个架构设计原则,其核心思想是服务的设计以系统资源为中心而不是以服务的功能为中心,包括资源的状态如何表示并如何通过HTTP传输给用不同语言编写的客户端。随着REST的设计理念逐渐被越来越多的人接受,实现了REST的框架相继出现,JCP也制定了JSR 311 (JAX-RS: Java API for RESTful Web Services)规范并做为Java 6的一部分进行了发布。

 

当我们在设计Restful服务的时,应该遵循一下设计原则:


原则一: 使用HTTP的方法进行资源访问

 

1) 使用HTTP POST方法去创建 资源

2) 使用HTTP GET方法去读取 资源

3) 使用HTTP PUT 方法去更新 资源

4) 使用HTTP DELETE方法去删除 资源

 

原则二: 使用无状态/无会话的服务设计

 

很长时间以来,人们采用有状态的服务设计从而在客户端与服务端的多次交互中维护一定的上下文。表格分页应用就是最常见的一个例子,通常程序员在HTTP Session中保持当前页的变量currentPage,当用户用地址http://www.foo.com/articles?action=nextPage来获取下一页的时候,服务可以根据currentPage获取下一页的数据,即返回第currentPage+1页的数据。

 

然而,有状态的设计使得程序很难随着工作负载的增加而进行伸缩。比如某个服务实例拥有10000个会话的状态,则通常很难通过增加服务实例来分担其工作负载:工作负载被锁定了! 反之,如果程序被设计成一个无状态的,则可以自由增加服务实例,并且在这些实例之间平衡负载,从而使得服务具有较好的伸缩性,这在大规模分布式系统中尤其重要!!


原则三: 用目录结构风格的URL设计来表示资源

 

用清晰的URL路径表示资源可以使客户端更容易理解和操作资源。URL可以被看作是一种自我解释的接口,不需要太多解释就可以让人明白该URL指向的是什么资源以及如何获得相关的资源。

 

下面是几个例子,供大家参考:

http://www.foo.com/research/articles/{article_title}

http://www.foo.com/research/articles/{year}/{month}/{day}/{article_title}

 

原则四: 使用XML或JSON来传输数据

 

服务和请求的消息数据中包含了对于资源的属性的描述,服务应该采取结构良好并且易于阅读的方式来描述资源。资源可能是数据库中的某个记录集合或者是一个具体的记录,可以是文档,甚至可以是数据中心的服务器。XML、JSON都是结构良好的语言,并且适于阅读。我个人比较偏好使用JSON,更加简洁。下面是两个XML和JSON消息的例子,供大家参考。

 

JSON Example:

{
    "menu": {
          "id": "file",
         "value": "File",
          "popup": {
               "menuitem": [
                         {"value": "New", "onclick": "CreateNewDoc()"},
                        {"value": "Open", "onclick": "OpenDoc()"},
                        {"value": "Close", "onclick": "CloseDoc()"}
                ]
            }
    }
}

相应的XML:

<menu id="file" value="File">
  <popup>
       <menuitem value="New" onclick="CreateNewDoc()" />
       <menuitem value="Open" onclick="OpenDoc()" />
       <menuitem value="Close" onclick="CloseDoc()" />
 </popup>
</menu>

 

最后,用一小段总结一下REST和XML-RPC的区别,从而加深大家对REST的理解。大家经常会碰到很多用XML表示数据并用HTTP进行传输消息的应用,那么是不是这些应用都是RESTful风格的呢?其实未必。本质区别就在于URL所表示的是资源还是功能,如果是资源则是RESTful风格的,如果是功能则是XML-RPC.

wai2dance
发表于: 2013/2/3 0:31 引用 回复 只看该作者 8# TOP
江湖新秀
性别: 男
积分:127
阅读权限:47
帖子: 14
加入时间: 2013/1/31
最后登录: 2013/3/5

 太专业了    支持一下     

快速回复主题