restful架构风格设计准则(二)以资源为中心,一个url
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者!
1、REST是一种架构风格,其核心是面向资源,简化设计,降低开发的复杂性,提高系统的可伸缩性。
REST设计概念和准则为:
a、网络上的所有事物都可以被抽象为资源,通过统一资源标识符(URI)来识别和定位资源。每个资源都有唯一的资源标识,对资源的操作不会改变这些标识
b、REST设计架构遵循CRUD原则,针对这些资源执行的操作使用请求方法,如:
◆POST: 创建
◆GET: 读取
◆PUT: 更新
◆DELETE: 删除
c、所有的操作都是无状态的,没有上下文的约束。
这样如果做分布式、集群就不需要考虑上下文和会话保持的问题,可以极大的提高系统的可伸缩性。
2、一个实际的REST例子:
REST架构下,一个 Web 应用总是使用固定的 URI 表示一个资源,
我们来看一个实际例子:
http://www.example.com/photo/logo
指向 example.com 网站(Web应用)中类型为 photo,名字为 logo 的资源。
我们用浏览器访问这个URI,看到的将可能是一个 xhtml 文档,或一个xml,或者一个图片。
事实上,这个地址很可能会在服务器内部处理为 http://www.example.com/photo.do?name=logo 这样的地址。
photo.do 是服务器端的一个action,根据 name 参数生成 xhtml 文档返回给浏览器。
现在假设我们要获取这张照片的 XML 文档。XML 文档中包含照片的文件名、文件大小、拍摄日期等等信息。
也就是说我们要获取“同一个资源的不同表现形式的数据”。
错误的实现方式:
对于这个要求,我们可以很容易的用另一个 URL 地址达到:http://www.example.com/xml/logo。
但是,这就违背了“URI 唯一标识一个资源”的定义。如果我们要获取同一个资源的多种表现形式,那么就要使用更多的 URL,从而给一个资源指定了多个不同的 URI。
而在 REST 中,不管是获取照片的 xhtml 文档还是 XML 文档,或者照片文件本身,都是用同一个 URI,就是 http://www.example.com/photo/logo。
正确的实现方式:
那这是怎么办到的呢?
我们可以通过HTTP Request Header 信息来区分客户端是想要取得资源的哪一种表现形式的数据。
当我们用浏览器访问一个网址时,浏览器会构造一个 HTTP 请求。这个请求有一个头信息,其中包括了本次请求接受何种类型的数据。
通常浏览器发送的 HTTP 请求头中,Accept 的值都是 */*,也就说接受服务器返回的任何类型的数据。
所以,只要我们指定一个特定的 Accept 参数,服务器就可以通过判断该参数来决定返回什么类型的数据。
所以在一个采用 REST 架构的应用中,要获取同一个资源的不同表现形式的数据,只需要使用不同的 HTTP 请求头信息就行了。
再如:
一段文字,可以用txt去表现,也可以用 html、xml、json表示。
一张图片,有jpg、png、gif格式。
我们把一种资源具体呈现出来的形式叫表现层。
3、一个应用场景:
如果考虑为一个 Web 应用增加 Web Services,这种技术的价值就体现出来了。
比如我写了一个 Delphi 程序,现在只需要构造一个包含 Accept: text/xml 的 HTTP 请求头,然后将请求发送到 http://www.example.com/photo/logo 就可以了。
返回的结果就是一个 XML 文档,而不是 xhtml 文档。
4、更完整的REST架构例子
REST 架构用不同的 HTTP 请求方法来处理对资源的 CRUD(创建、读取、更新和删除)操作。 对一个资源的 CRUD 操作就可以通过同一个 URI 完成,如:
http://www.example.com/photo/logo(读取) 仍然保持为 [GET] http://www.example.com/photo/logo
http://www.example.com/photo/logo/create(创建) 改为 [POST] http://www.example.com/photo/logo
http://www.example.com/photo/logo/update(更新) 改为 [PUT] http://www.example.com/photo/logo
http://www.example.com/photo/logo/delete(删除) 改为 [DELETE] http://www.example.com/photo/logo
通过 REST 架构,Web 应用程序可以用一致的接口(URI)暴露资源给外部世界,并提供对资源的操作服务。
这对于以资源为中心的 Web 应用来说非常重要。例如照片共享网站、用户社区等。
restful架构风格设计准则(二)以资源为中心,一个url的更多相关文章
- restful架构风格设计准则(四)资源表示和资源访问
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 一.资源表示 1.资源表示:使用 单数 vs. 复数 如果一个URL所对 ...
- restful架构风格设计准则(三)资源识别和资源设计
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! restful风格的设计中,首先要识别系统中的资源,然后用HTTP规范表 ...
- restful架构风格设计准则(一)以资源为中心、自描述的请求响应、资源状态迁移为粒度
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 一.需求描述 当用户在某个电子商务网站购物时,他首先查看要购买的商品分类 ...
- restful架构风格设计准则(六)版本管理
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 版本管理 在前面已经提到过,一个REST系统为资源所抽象出的URI实际上 ...
- restful架构风格设计准则(五)用户认证和session管理
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! Authentication REST提倡无状态约束,这就要求:用户状态 ...
- RESTful架构(Representational State Transfer资源表现层状态转换)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- 理解RESTful架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...
- [转]理解RESTful架构
原文地址:http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...
- 理解RESTful架构(转载)
本文转载自:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软 ...
随机推荐
- 我的C++学习之旅
说在前面:1.学习缘由及学习途径: 在学了Python,c#(自认为未精通)之后,我决定学一下C++. 于是去网上找视频教程,发现都不适合我这种有一定基础的自学者,要么是不完整的高级教程,要么是零基础 ...
- ISAPI和CGI限制中没有ASP.NET v4.0
[服务器搭建]ISAPI和CGI限制中没有ASP.NET v4.0解决方式: 1.确保安装IIS时确实安装了ASP.NET,如果没有的话,勾上重新装一下,一般出现404.2时这么干 2.如果你是先装了 ...
- Tomcat5.5.9+JSP经典配置实例
一.开发环境配置 第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下载j2sdk,注意下载版本为Windo ...
- 走近webpack(3)--图片的处理
上一章,咱们学了如何用webpack来打包css,压缩js等.这一篇文章咱们来学习一下如何用webpack来处理图片.废话不多说,咱们开始吧. 首先,咱们随便找一张你喜欢的图片放到src/images ...
- eclipse编码设置
- 获取DOM节点的几种方式
DOM 是一个树形结构,操作一个DOM节点,实际上就是这几个操作:更新.删除.添加.遍历 在操作DOM节点之前,需要通过各种方式先拿到这个DOM节点,常用的方法有: 一.通过元素类型的方法来操作: d ...
- KVM之五:KVM日常管理常用命令
1.查看.编辑及备份KVM 虚拟机配置文件 以及查看KVM 状态: 1.1.KVM 虚拟机默认的配置文件在 /etc/libvirt/qemu 目录下,默认是以虚拟机名称命名的.xml 文件,如下,: ...
- 基于node写了个工具,可以在线制作“sorry,为所欲为”的 GIF(开源)
SnailDev.GifMaker 一个生成gif并添加自定义字幕的工具 client 微信小程序 server nodejs + express 欢迎 star&fork 如果您有好的com ...
- Linux x86_64内核中断初始化
Linux x86_64内核中断初始化 [TOC] 中断分类 Linux系统中,中断分为: 硬中断:由外部设备或者执行异常产生的需要快速处理的中断.如缺页中断.定时器硬件中断. 根据内部产生还是外部产 ...
- 笔试常考--浏览器输入一个URL点击回车之后发生了什么
解析URL:浏览器首先对拿到的URL进行识别,抽取出域名字段. DNS解析: 查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到, 检查系统缓存,检查hosts文件,这个文 ...