`
ufopw
  • 浏览: 162969 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

REST服务的基本设计原则

 
阅读更多

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.

分享到:
评论
1 楼 duyangsss 2012-02-09  
总结得很好,很有用。

相关推荐

    Rest服务搭建范例

    REST(Representational State Transfer...通过学习和运行这个项目,你将深入理解RESTful服务的设计原则,以及如何在Java环境中实现它们。同时,这也是迈向微服务架构的第一步,有助于提升你在分布式系统开发中的技能。

    基于 REST 的 Web 服务:基础

    REST的四大基本设计原则: 1. **显式使用HTTP方法**: REST要求开发者严格按照HTTP协议定义的方法(GET、POST、PUT、DELETE等)进行操作。HTTP GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于...

    Rest服务学习

    REST服务的设计原则包括无状态、层式系统、缓存机制和统一接口,使得服务易于理解和实现。 **二、Spring对REST的支持** Spring框架提供了强大的支持来创建和消费REST服务。Spring MVC模块提供了构建RESTful API的...

    Asp.net 实现 Rest服务接口

    首先,理解REST的基本原则至关重要。REST架构风格强调资源的概念,通过URI(Uniform Resource Identifier)来标识,使用HTTP方法(GET、POST、PUT、DELETE等)来操作这些资源。在ASP.NET中,我们通常使用ASP.NET Web...

    Rest api服务器配置

    3. **路由配置**:RESTful设计要求清晰的URL结构,如`/users/{userId}`表示用户资源,`/{resource}/[id]`是基本的REST路由模式。在框架中,我们需要根据业务需求定义这些路由,并关联到对应的处理函数。 4. **HTTP...

    教您如何写好REST服务和文档

    首先,我们需要理解RESTful API设计的基本原则: 1. **资源导向**:REST服务中的每个操作都是对特定资源的操作,资源由URI(统一资源标识符)唯一标识。例如,`/users/1`代表用户ID为1的资源。 2. **无状态**:...

    REST参考技术文档

    其中可能涵盖了REST与SOAP(简单对象访问协议)的区别,RESTful服务的设计原则,以及REST如何通过HTTP方法(如GET、POST、PUT、DELETE等)来操作资源。此外,也可能讨论了RESTful服务的缓存策略,以及如何通过状态码...

    面向服务的架构SOA分为2种 SOAP即Webservice和REST

    面向服务的架构(Service-Oriented Architecture,简称SOA)是一种设计原则,它提倡将复杂的系统分解为一组可重用的服务,这些服务可以独立部署、管理和集成。在SOA的世界里,服务是业务功能的最小单元,它们通过...

    基于REST的Web服务客户端.rar

    首先,理解REST的基本原则至关重要。REST强调无状态、缓存、统一接口和层状系统等核心概念。无状态意味着每次请求都包含处理请求所需的所有信息,服务器不保存任何会话状态。缓存可以提高性能,因为客户端可以存储...

    REST实战(REST in Practice)

    通过以上内容可以看出,《REST实战(REST in Practice)》不仅是一本介绍REST基本概念和技术的书籍,更重要的是它提供了一种实用的方法论,帮助读者理解如何将REST应用于现实世界的问题中,从而使分布式系统的设计更加...

    REST实战.pdf 中文完整版

    本书《REST实战》深入浅出地介绍了REST的基本原理和实践技巧,是学习REST模式设计的重要参考资料。 在Java中实现REST服务,通常会用到JAX-RS(Java API for RESTful Web Services)规范,该规范为构建RESTful服务...

    REST WebService简单应用

    学习和理解REST Web Service的基本概念和实践,以及如何使用JAX-RS进行开发,对于构建可扩展、易于维护的Web服务至关重要。通过实际动手编写和运行提供的示例,你可以更好地理解和掌握这些知识。

    Rest 开发小案例

    通过此案例,开发者可以快速了解REST设计原则,掌握如何在Java环境中构建RESTful API,以及如何与不同的HTTP方法交互。此外,这个案例还提供了所有必要的库文件,便于在本地环境中快速搭建并运行REST服务。

    WCF REST Service Template 40

    **WCF REST Service Template 40** 是一个专门为Visual Studio 2010设计的扩展模板,用于简化基于Windows Communication Foundation (WCF) 创建RESTful服务的过程。REST(Representational State Transfer)是一种...

    Wcf和Rest服务的完整例子代码

    在这个示例中,你将看到如何使用REST服务来处理这些HTTP方法,设计URI以符合资源导向的原则。 在WCF和REST服务中,数据的序列化和反序列化是关键环节。序列化是将对象转换为可以在网络上传输的数据格式的过程,如...

    REST架构的网络服务

    这些案例展示了如何有效地利用REST原则来设计高效、可靠的服务。 #### 六、RESTful Web服务的设计实践 - **只读服务设计**:这类服务主要关注于数据的检索,通常使用HTTP GET方法。例如,查询用户资料、商品列表等...

    REST实战中文版(有目录)

    REST服务通常需要一些基本的设计考虑,例如资源的命名、资源状态的表述、资源操作的实现以及响应消息的设计。正确地定义资源及其表示形式对于REST API的设计至关重要。例如,对于一个博客系统,文章、评论、用户都...

    rest简单示例

    REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,主要用于设计网络应用程序,尤其在Web服务领域广泛应用。REST原则强调的是资源的管理和状态转换,通过HTTP协议中的方法(如GET、POST...

    基于REST架构的Web Service设计

    总结来说,基于REST架构的Web服务设计是现代Web开发中常用的一种技术,它提供了简单、高效且易于扩展的服务接口,适用于各种规模的项目,特别是互联网和移动应用。通过遵循REST原则,开发者能够构建出更加灵活、可...

Global site tag (gtag.js) - Google Analytics