RESTful_URI资源
目录
RESTful的资源
在RESTful基础知识篇中,介绍了资源是存在于业务逻辑层中的概念实体(如:应用程序对象、数据库记录、算法、HTML、视频图像等),它会在表现层中被确定,并最终由表现层将资源向自动化客户端以URI的形式公开。可以简单的将资源理解为公开的URI,在客户端中可以通过URI来对资源进行操作。所以首先我们必须理解URI的意义。
URI 标识资源
URI(uniform resource identifier,统一资源标识符):唯一的标识一个资源。URI的组成部分如下:
1. 访问资源的协议
2. 资源所在的Host
3. 在Host中资源的路径(定义了某一个资源)
Example:
http://www.jmilk.com//Jpython
- 这是一个通过HTTP协议来访问的资源
- 存放资源的Host为www.jmilk.com
- 在Host中资源的路径为/Jpython
URL 定位资源
URL(uniform resource locator,统一资源定位器):URL是一种具体的URI(URL是URI的子集),即URL在标识了一个资源的同时,并且还指明了如何定位到这个资源。URL的组成部分如下:
1. 访问资源的协议
2. 存放资源的Host
3. 资源在Host中的定位(定位到某一个具体的资源单位)
格式:
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
Example:
http://img4.imgtn.bdimg.com/it/u=3215216746,1883997400&fm=21&gp=0.jpg
- 这是一个通过HTTP协议来访问的资源
- 存放此资源的Host为img4.imgtn.bdimg.com
- 被定位到的资源为:0.jpg
URI与URL的区别
通过上述的例子如果还不能很好的区别两者,那么简而言之:
URI(定义、标识)表示请求服务器的路径,在这个路径下定义了这么一个资源。
URL(定位)表示请求服务器的路径,并在这个路径下能够访问、获取、操作这么一个资源。
为什么使用资源的概念
资源对一个事物的高度抽象,系统中的一切都可以抽象为资源,例如:
用户--> http://example.com/user
商品--> http://example.com/product/1
有了资源的概念后,我们可以通过Server向Client公开的URI来唯一的访问一个资源。符合松耦合、关注服务对象的RESTful设计理念
对资源的操作
对资源的操作包括获取、创建、修改和删除资源,这些操作对应了HTTP协议提供的GET、POST、PUT和DELETE方法。所以当我们从自动化客户端发起无状态请求时,需要在请求的头部包含有这些方法,最终通过URI和方法的组合来对Server中的资源进行操作。
URI的设计
一个URI到底是不是资源并不是由网址链接来决定,而是由这个URI的实际功能来决定,网址只是一个串符号。而且一个好的URI,能够对资源进行合理的描述,用户可以更直观的理解这个资源的功能作用。下面给出例子:
/resources/142是好的URI,它看起来像是一个事物。
/resources/142/get则不是好的URI,因为它看起来更像是一个动作,只有事物才符合资源的定义。
所以要想符合RESTFul风格的设计,你的URI中应该都是名词,表示一个事物,而非动词。
最新文章
- HTML的初体验
- 【python】安装python第三方库lxml时,遇到问题:[ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序]
- 过滤Xss
- 《细细品味Hive》系列课程
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
- 专题——web.xml 中 url-pattern
- Python学习 之 switch语句
- python django第一天
- 管道技巧-while read line
- MySQL生僻字(不常用字)的完整解决方案
- Python django admin 替换表单控件
- 在Ubuntu上安装VmTools
- Datatable根据多行排序
- cocos2dx进阶学习之CCScene
- Oracle中row_number()、rank()、dense_rank() 的区别
- 9 个 Yoinkmac使用小技巧,提升你的 Mac 文档解决效率
- 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
- [C++]2-5 分数化小数
- Refs &; DOM
- Android OpenGL教程-第一课【转】
热门文章
- Windows7无法删除EFI分区解决办法
- Java学习day9面向对象编程2-方法的可变个数的参数和方法的参数传递
- 小白学Python(15)——pyecharts 绘制树形图表 Tree
- Topcoder SRM656div1 250 ( 期望DP )
- 洛谷 - P3649 - 回文串 - 回文自动机
- ofbiz框架以及核心原理介绍
- ZeroAccess分析
- C语言如何使输出的数字对齐
- vue中对于图片是否正常加载的思考
- jQuery中$.get()和$.post()的异同点