1.什么是RESTful API

API?

在了解什么是RESTful API之前,我们先了解什么是API?即Application Programming Interface,应用程序编程接口,通俗的讲,就是为了方便开发者使用,将代码封装成一个方法,这个方法可以具有单独的功能,eg:初始化函数,也可以是各种功能的集合,eg:工具类,还有就是我们经常使用的JDBC接口,JDBC接口封装了连接数据库的方法,开发者只需要调用该接口的方法,既可以连接数据库。

我的理解是:上面的这些对API的理解,更多的是单一的,狭义的,而接口其实可以理解成一个功能的入口,这里强调功能和入口, 功能即接口是有目的性的,即这个接口是对某个功能的体现,其次是入口,即通过这个接口,我们可以达到我们的目的。而RESTful API中,提到的Web API ,更多的是指URL,就是一个通过这个接口,可以获取Web中的资源或者对其资源进行相应的操作。

通过对API的理解,让我想到封装的特性,封装就是将类的变量和方法进行隐藏,可以通过private关键字,以及方法等手段,当初的我对封装的理解就是这样,但是当学习到接口时,这个时候也体现出封装的特点,即接口是对方法的封装,将方法的具体实现进行隐藏,通过接口,让我对封装有更深的理解,其主要是因为站在不同的角度。

REST

REST术语的来自Roy T.Fielding的博士的论文,REST(Representational state transfer),表述性状态转移,理解表述性状态转移.REST一种原则,架构。“REST不是一种协议,也不是文件格式,更不是开发框架,它是一系列的设计约束的集合:无状态性,将超媒体作为应用状态的引擎等,我们将这些约束统称为Fielding约束。”引用《RESTful Web APIs》。

首先解释一下几个概念:

⑴application state(应用状态):从浏览器的角度考虑,通过URL获取到资源的信息的页面,

⑵资源状态:即从服务器的角度考虑,存储在服务器的资源,

⑶表述:即浏览器发送请求后,服务器发送给浏览器的响应(通常是一个HTML文档,或图片,其他),将这个文档称为资源的表述。

⑷状态转移:即从一个应用转台转换到另一个应用转台,例如从一个页面转换到另一个页面。

因此,对REST的通俗理解是,REST是一种约束,即如何从一个Web转移到另一个Web页面中所使用的规范。即我的理解是REST是一种有关如何获取资源,操作资源,显示资源的规范。

RESTful API

RESTful API,即以REST构建的API。即通过此API可以获取,操作,显示Web信息。

2.API和消息,超媒体

表述

表述,就是资源的表示方式,例如文档,图片,等,当然也可以采用XML文档,JSON对象,逗号分隔的数值等。

HTTP消息

在REST中,客户端和服务器端互相发送消息需要遵守预定的协议的消息来进行交互,在Web API中,这个协议就是HTTP,在RESTful API架构并未采用HTTP。

HTTP标准定义了8中不同类型的消息,即GET,HEAD,PUT,POST,DELETE,OPTIONS,CONNECT,TRACE,非标准:PATCH,LINK,UNLINK;

GET:获取资源的描述;

HEAD:获取相应的报头信息;

PUT:用给定的表述信息替换资源的当前状态;

POST:创建新的资源;

DELETE:销毁资源;

OPTIONS:获取这个资源所能响应的HTTP方法列表;

LINK:将其他资源连接到当前资源;

UNLINK:销毁当前资源和其他某些资源的连接关系;

CONNECT和TRACE只用于HTTP代理。等等等。

幂等性:

幂等的概念来自数学,零乘运算是一个幂等运算,即一旦将一个数值乘以0,就可以无限次的乘以0,得到的还是同样的结果。HTTP DELETE方法就相当于用零乘以一个资源。 

DELETE方法是幂等的。幂等性就是发送两次请求对资源状态的影响和发送一次请求的影响是一样的。例如发送一个DELETE请求,但网络连接超时,并没有响应消息,所以无法知道DELETE操作是否顺利执行完成,只需要在发送一条DELETE请求并不断重试直到收到响应信息就可以。执行两次DELETE请求并不比只执行一次造成更多的影响。

超媒体

“超媒体是超级媒体的缩写。超媒体是一种采用非线性网状结构对块状多媒体信息(包括文本、图像、视频等)进行组织和管理的技术。”--来自百度百科。超媒体是一种策略,方法,可以由多种技术以不同的方式来实现。超媒体将资源互相连接起来,并以及其可读的方式来描述他们的能力。我的理解是:超媒体是一种组织信息,管理信息,显示信息的多种技术的组合。

HTML:在Web中,一般将HTML作为超媒体的格式,资源的标识方式还有XML,JSON等。

URI:用来标识资源。URI和URL的区别:

⑴URI是统一资源标识符,URL统一资源定位符,URL和URI都可以用来标识资源的简单字符串,而每个URL都是一个URI,它们在同一个标准中,RFC 3986;

⑵URI只是一个标识,URL是一个可以被引用的标识;URI包括URL,有些时候,我们写的是URI,但是更多的指的是URL.

3.总结

通过对RESTful API知识的梳理,重要的是它不是一门技术,而是一些约束,规范,如何在网页显示信息,以及页面(状态)之间如何转移,如何获取信息等, 在此约束上,涉及的技术很多,如HTML,HTTP协议,URL,客户端,服务器等。因此了解RESTful有助于对Web的运行,原理加深理解。

 

 

借鉴《RESTful Web APIs》    如有异议,敬请指出,与君共勉。