文档章节

REST服务的基本设计原则

hefeiuu
 hefeiuu
发布于 2017/05/04 20:27
字数 1060
阅读 206
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

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.

本文转载自:http://ufopw.iteye.com/blog/1154134

hefeiuu
粉丝 3
博文 64
码字总数 0
作品 0
合肥
私信 提问
加载中
请先登录后再评论。
jeesz分布式架构-RestFul服务

摘要: REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识。 RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作的调用...

qq593e3b758e013
2017/06/12
0
0
Node.js RESTful API

Node.js RESTful API 现在介绍Node.js的RESTful API。 。。。 什么是 REST? REST中文解释为,表述性状态传递(英文:Representational State Transfer,简称REST),是Roy Fielding博士在2...

我要努力_为自己
2018/11/26
17
0
JEESZ REST 服务接口介绍

REST 介绍 REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识。RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作的...

明理萝
2018/08/21
1
1
jeesz分布式架构-RestFul服务

1. REST介绍 REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识。 RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作...

qq592fbb5b34ad7
2018/07/02
0
0
Rest风格WEB服务(Rest Style Web Service)的真相

写这篇文章是目的不是介绍Web-Service, 而是从Restful Web Service说起来剖析一下 什么才是真正的Restful Style的架构与协议,从而更好的理解web服务的设计理念与架 构本质。 一:Web Servi...

mysky221
2014/10/14
438
0

没有更多内容

加载失败,请刷新页面

加载更多

【MySQL】恢复从库时,主库的Binlog接续补上的解决方案

情景 从库从主库的一天前的备份恢复后,出现了如下错误: SITION = 1, but the master has purged binary logs containing GTIDs that the slave requires 该实例的每秒事务在大概4K左右,所以...

osc_77kn21rn
7分钟前
6
0
智能网约车车载终端,安全出行解决方案-飞凌A40i核心板来实现

自从共享经济模式崛起开始,网约车 和出租车 已经成为了最为普及的共享出行方式 ,然而在为民众带来极大便利的同时,也存在着各种问题。 关于网约车的服务态度、安全等问题频频引发各种质疑 ...

osc_vvylzpqs
9分钟前
12
0
Linux命令行与shell脚本编程大全第三版 学习笔记

1. 初识Linux shell 1.1, Linux分为四个部分: Linux内核,GNU工具集,图形化桌面环境,应用软件 1.1.1, Linux内核主要负责四种功能:系统内存管理,软件程序管理,硬件设备管理,文件系统管...

osc_9yulefcq
10分钟前
10
0
@Component默认是单例还是多例?

@Component默认是单例还是多例? 答: @Component注解默认实例化的对象是单例,如果想声明成多例对象可以使用@Scope("prototype") @Repository默认单例 @Service默认单例 @Controller默认多例...

osc_uu6euvkf
11分钟前
8
0
JetBrains系列IntelliJ IDEA、GoLand等 2020.1.2最新破解激活方法(没有下载链接)

jetbrains-agent from:Neo Peng ,感谢作者的分享 一、下载jetbrains agent 抱歉,暂时不提供连接了,大伙自己找链接吧,建议关注上面提的公号 二、IDE激活方式1 1.先选择试用 2.打开IDE,H...

osc_z9jr2tjo
12分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部