RESTful WebService核心概念(随笔)

RestFul WebService :新型,简便、面向资源(ROA)

RestFul是一种编码的风格

RPC-WebService: SOAP(简单对象访问协议),成熟,应用广泛,采用XML方式传递

REST核心概念

面向资源(ROA):把资源暴露出来,通过URI(统一资源定位符)去访问,每一个资源都有一个URI。

资源所谓”资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,甚至是数据库,总之就是一个具体的实在。

模型表示:资源用JSON(常用)或者XML表示

统一接口:数据的元操作(CRUD)分别对应HTTP方法

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。
  • OPTIONS :用于获取资源允许的操作
  • HEAD :仅返回响应头和空的响应体。例如,HEAD可以快速检测服务器上的资源是否存在

    客户端和服务端经由消息相互沟通,除了实际的数据,这些信息也包含一些关于消息的元数据(元数据主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件纪录等功能。)。

无状态:状态信息相互独立,不会在不同请求之前传递状态信息(调用操作不会影响服务器状态)

所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。

无状态的设计:

Requset1:Get http://MyService/Persons/1 HTTP/1.1

Requset2:Get http://MyService/Persons/2 HTTP/1.1

每个请求都能被单独对待

有状态的设计:

Requset1:Get http://MyService/Persons/1 HTTP/1.1

Requset2:Get http://MyService/NextPerson HTTP/1.1

获取第二个资源需要服务端记住客户端最后获取的PersonID,也就是需要记住当前状态

URI:REST要求每个资源至少有一个URI。RESTful服务使用URIs层级目录来定位资源。URI要做的工作是定义一个资源或资源合集。实际操作由HTTP动作决定。URI应该没有任何关于处理和动作的内容。这使得我们能够调用相同的URI使用不同的HTTP动词来执行不同的操作。

具体详细概念参考以下2篇文章

http://blog.igevin.info/posts/restful-architecture-in-general/#restful_features4

https://zhuanlan.zhihu.com/p/21644769

0 Comments
Leave a Reply