目录

RESTful的资源

在RESTful基础知识篇中,介绍了资源是存在于业务逻辑层中的概念实体(如:应用程序对象、数据库记录、算法、HTML、视频图像等),它会在表现层中被确定,并最终由表现层将资源向自动化客户端以URI的形式公开。可以简单的将资源理解为公开的URI,在客户端中可以通过URI来对资源进行操作。所以首先我们必须理解URI的意义。

URI 标识资源

URI(uniform resource identifier,统一资源标识符):唯一的标识一个资源。URI的组成部分如下:

1. 访问资源的协议

2. 资源所在的Host

3. 在Host中资源的路径(定义了某一个资源)

Example:

http://www.jmilk.com//Jpython
  1. 这是一个通过HTTP协议来访问的资源
  2. 存放资源的Host为www.jmilk.com
  3. 在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
  1. 这是一个通过HTTP协议来访问的资源
  2. 存放此资源的Host为img4.imgtn.bdimg.com
  3. 被定位到的资源为: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中应该都是名词,表示一个事物,而非动词。

最新文章

  1. HTML的初体验
  2. 【python】安装python第三方库lxml时,遇到问题:[ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序]
  3. 过滤Xss
  4. 《细细品味Hive》系列课程
  5. 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
  6. 专题——web.xml 中 url-pattern
  7. Python学习 之 switch语句
  8. python django第一天
  9. 管道技巧-while read line
  10. MySQL生僻字(不常用字)的完整解决方案
  11. Python django admin 替换表单控件
  12. 在Ubuntu上安装VmTools
  13. Datatable根据多行排序
  14. cocos2dx进阶学习之CCScene
  15. Oracle中row_number()、rank()、dense_rank() 的区别
  16. 9 个 Yoinkmac使用小技巧,提升你的 Mac 文档解决效率
  17. 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
  18. [C++]2-5 分数化小数
  19. Refs & DOM
  20. Android OpenGL教程-第一课【转】

热门文章

  1. Windows7无法删除EFI分区解决办法
  2. Java学习day9面向对象编程2-方法的可变个数的参数和方法的参数传递
  3. 小白学Python(15)——pyecharts 绘制树形图表 Tree
  4. Topcoder SRM656div1 250 ( 期望DP )
  5. 洛谷 - P3649 - 回文串 - 回文自动机
  6. ofbiz框架以及核心原理介绍
  7. ZeroAccess分析
  8. C语言如何使输出的数字对齐
  9. vue中对于图片是否正常加载的思考
  10. jQuery中$.get()和$.post()的异同点