怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

一、REST

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

眼下在三种主流的Web服务实现方案中。由于REST模式与复杂的SOAP和XML-RPC相比更加简洁。越来越多的web服务開始採用REST风格设计和实现。

比如:Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

二、REST的架构设计

  REST(Representational State Transfer)是一种轻量级的Web Service架构风格,事实上现和操作明显比SOAP和XML-RPC更为简洁,能够全然通过HTTP协议实现,还能够利用缓存Cache来提高响应速度。性能、效率和易用性上都优于SOAP协议。

  REST架构遵循了CRUD原则,CRUD原则对于资源仅仅须要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就能够完毕对其操作和处理。这四个操作是一种原子操作。即一种无法再分的操作。通过它们能够构造复杂的操作过程,正如数学上四则运算是数字的最主要的运算一样。

  REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包含获取、创建、改动和删除资源的操作正好相应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。

这样的针对网络应用的设计和开发方式。能够减少开发的复杂性。提高系统的可伸缩性。

三、REST的设计准则

  REST架构是针对Web应用而设计的,其目的是为了减少开发的复杂性,提高系统的可伸缩性。REST提出了例如以下设计准则:

l 网络上的全部事物都被抽象为资源(resource)

l 每一个资源相应一个唯一的资源标识符(resource identifier)

l 通过通用的连接器接口(generic connector interface)对资源进行操作

l 对资源的各种操作不会改变资源标识符

l 全部的操作都是无状态的(stateless)

四、要点及标准

须要注意的是。REST是设计风格而不是标准。

REST通常基于使用HTTP。URI,和XML以及HTML这些现有的广泛流行的协议和标准。

l 资源是由URI来指定。

l 对资源的操作包含获取、创建、改动和删除资源,这些操作正好相应HTTP协议提供的GET、POST、PUT和DELETE方法。

l 通过操作资源的表现形式来操作资源。

l 资源的表现形式则是XML或者HTML。取决于读者是机器还是人。是消费web服务的客户软件还是web浏览器。

当然也能够是不论什么其它的格式。

五、REST的要求

l client和server结构

l 连接协议具有无状态性

l 可以利用Cache机制增进性能

l 层次化的系统

l 随需代码 - Javascript (可选)

六、关于状态

应该注意差别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每一个连接的信息),而REST传输会包括应用的全部状态信息,因此能够大幅减少对HTTP连接的反复请求资源消耗。

七、含状态传输的 Web 服务

含状态传输的 Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。

它从下面三个方面资源进行定义:

l 直观简短的资源地址:URI,比方:http://example.com/resources/。

l 传输的资源:Web服务接受与返回的互联网媒体类型,比方:JSON。XML ,YAML 等。

l 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比方:POST,GET,PUT或DELETE)。

下表列出了在实现 含状态传输的 Web 服务时HTTP请求方法的典型用途。


HTTP 请求方法在RESTful Web 服务中的典型应用


资源


GET


PUT


POST


DELETE


一组资源的URI。比方http://example.com/resources/


列出 URI,以及该资源组中每一个资源的具体信息(后者可选)。


使用给定的一组资源替换当前整组资源。


在本组资源中创建/追加一个新的资源。

该操作往往返回新资源的URL。


删除 整组资源。


单个资源的URI,比方http://example.com/resources/142


获取 指定的资源的具体信息。格式能够自选一个合适的网络媒体类型(比方:XML、JSON等)


替换/创建 指定的资源。

并将其追加到对应的资源组中。


把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。


删除 指定的元素。

PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对server端有改动,因此當然也是幂等的)。

不像基于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的长处

l 可更高效利用缓存来提高响应速度

l 通讯本身的无状态性能够让不同的server的处理一系列请求中的不同请求,提高server的扩展性

l 浏览器就可以作为client,简化软件需求

l 相对于其它叠加在HTTP协议之上的机制,REST的软件依赖性更小

l 不须要额外的资源发现机制

l 在软件技术演进中的长期的兼容性更好

十、个人总结

l REST架构仅仅是一种思想,并没有限定不论什么技术,不论什么语言。

l REST的本质就是HTTP调用,用于减少各个应用之间的耦合度。

l 良好的REST 架构。应该有统一的表示方式和数据格式,可以有效的把各种资源组织起来,并可以进行有效的控制。

时间: 2024-08-04 20:36:39

怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现的相关文章

如何更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

一.REST 含状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格. 目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现.例如:Amazon.com提供接近REST风格的Web服务进行图书查找:雅虎提供的Web服务也是REST风格的. 二.REST的架构设计 REST(Rep

基于REST架构的Web Service设计

REST的架构设计 REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速 度,性能.效率和易用性上都优于SOAP协议. REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行 为:Create(创建).Read(读取).Update(更新)和Delete(删除)就可以完成对其操作和处理.这四个操作是一种

基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的细节,本文主要介绍整个Web开发框架中的MVC控制器的设计.在设计之初,我就希望尽可能的减少代码,提高编程模型的统一性.因此希望能够以基类继承的方式,和我Winform开发框架一样,尽可能通过基类,而不是子类的重复代码来实现各种通用的操作. 1.登录控制的控制器基类设计 我们知道,一般我们创建一个MVC的控制

敏捷开发下, 如何将需求分析,架构(软件)设计,开发与测试,一气呵成式的结合且高效的完成 ?

产品开发中,时常会发生类似如图中 "削马铃薯"的悲剧. 悲剧的发生,往往是由于我们只传递了 "要作什么功能"给开发人员.却缺乏了一个有效的且轻量级的实践,能在正式进入迭代开发前,确认开发人员是否真有能力,能将 "使用者的需求"转化为 "可执行的代码"? "场景树" 便是一结合Use Case, Domain Driven Design, UML 的轻量级可视化的敏捷实践. 经由场景树,可确认开发人员,是否已

你永远学不会的设计--&gt;百度地图map api key 的设置

哈哈 说到咱的互联网大佬 baidu, 真是无人不知,无人不晓,可是多少人能领会他的设计哲学呢? 来看看吧.... 事情要从上周的一个小实验说起,目标是调用baidu map api 做个产品原型. 通常呢,调用API 都是需要申请key的,方便有针对性地统计调用请求的情况,这个是行业的通用做法,然后小弟就去官网乖乖申请了个key, 然后呢,有一大堆的api 分类,啥 place API, route API , static map API 不管统统给我选上, 接下来就是查看api 开发文档示

【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级别的详细模型,并将它们彼此结合.测试然后发布到你的开发计划里. 在这个实验中, 我们将重点放在如何创建一系列简单的系统建模图形上. 每个练习应该在 30分钟内完成. Exercise 1 – 理解用户需求 绘制活动.类以及其他UML图形能帮助架构师清晰辨别客户的习惯.业务规则以及其他需求,从而使设计

整合微信小程序的Web API接口层的架构设计

在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介绍了相关模块的划分,在<基于微信小程序的系统开发准备工作>介绍了Web API的架构设计思路.本篇随笔对之前介绍的架构内容进行统一的调整更新,以便更加方便实际项目的应用开发,以期达到统一.重用.清晰的目的. 1.公众号.企业号.小程序模块的划分 我们知道,目前微信企业应用,分为公众号.企业号(企业

(转)基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

http://www.cnblogs.com/wuhuacong/p/3284628.html 自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的细节,本文主要介绍整个Web开发框架中的MVC控制器的设计.在设计之初,我就希望尽可能的减少代码,提高编程模型的统一性.因此希望能够以基类继承的方式,和我Winform开发框架一样,尽可能通过基类,而不是子类的重复

基于ZigBee的家居控制系统的设计与应用

基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘  要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通信技术等将家居中的各种电子电气设备连接起来,统一管理.远程监控和资源共享,实现了高效.便利的生活环境.近些年互联网的迅猛发展,网络的稳定性.安全性和网络带宽都有了长足的发展,由互联网提供的各种服务已经深入到人们生活的方方面面,因此将智能家居系统同互联网结合起来,为用户提供远程控制服务,延伸智能家居系