看到API你会想起什么?是接口、第三方调用、仍是API文档?初看你可能会以为这太熟悉了,这不是系统开发平常系列吗?但你仔细想想,你会发现API的概念在你脑海里是如此的模糊。如何你经过搜索引擎检索API,你会看到相似这样的信息:API——Application Programming Interface(应用程序编程接口),这太抽象了。接下来,我将结合在开发中总结的一些经验,以通俗的方式聊聊API、REST API、RESTful API以及Web Service这四者之间的联系与区别。html
什么是API?这里引述维基百科给出的定义:应用程序接口(英语:Application Programming Interface,缩写:API;又称为应用编程接口)是软件系统不一样组成部分衔接的约定。这个对API的定义太过于普遍和抽象,而通俗的讲,API是一段应用程序与另外一段应用程序相互“交流”的方式(协议)。在Web应用程开发中,API是咱们经过网络进行数据检索的一种主要方式,API文档将告知你检索数据的URL列表、查询参数、请求方式以及响应状态,其目的是下降Web应用程序开发难度,共享两个应用程序之间的数据(文本、音频、视频、图片等),而屏蔽其内部复杂的实现细节。web
REST是Representational State Transfer的缩写,直译过来就是:表述状态的转移。REST API是一组关于如何构建Web应用程序API的架构规则、标准或指导,或者说REST API是遵循API原则的一种架构风格。REST是专门针对Web应用程序而设计的,其目的在于下降开发的复杂度,提升系统的可伸缩性。下面是设计REST风格的系统架构时须要知足或者遵循的一些基本条件和原则:算法
如今,了解了API和REST API的基本概念,那这二者之间有什么异同?若是按照数学上集合的概念来解释API与REST API之间的联系与区别,API是REST API的超集,REST API 是API的子集;全部的REST API都是API,但不是全部的API都是REST API。更通俗的解释是:全部的男人都是人,但不是全部的人都是男人。数据库
在第一小节中,了解了什么是REST API,接下来聊聊REST API与RESTful API之间的异同。不少初学者很容易将这二者等同起来,认为RESTful API就是REST API,这多是单纯的从字面上去理解了,当你深刻的去了解二者的本质后,你会发现其实否则。REST API是Web API设计的一种规范或者指导原则,而RESTful API则是这中架构设计原则或者规范的一种具体实现方式。也就是说,RESTful API是REST API的非正式实现方式,由于实现REST API的方式有不少,RESTful API只是其中一种,且没有彻底知足REST API的全部设计原则,每一个开发者在实现REST 架构时的则重点都会有差异。编程
不少初学者容易将REST API与RESTful API二者的概念搞混淆,我想可能只是看字面意思,而没有关注它们自己的含义(就像认识中文字同样,有边读边,无边读中间,断章取义了)。这就比如不少人会把变性人等同于女人,变性人可能五官的表象看起来和女人同样,但变性人不能生育,它只是知足了定义一个女性的大多数条件(实现),但本质上不是女人。api
接下来,经过一个简单的例子以加深对REST API和RESTful API的理解。下面将给出一个执行CURD操做的RESTful API设计案例:缓存
说明:resource代指某种资源的名称,能够时student(学生)、teacher(老师)、book(书籍)等等,一般使用名词来表示;{id}则代指某种资源的惟一标识符(resource identifier)网络
下面是一个具体的小例子,以学生管理为例,设计学生管理的API。学生资源包括ID,姓名和所学课程信息,学生资源信息以下:架构
如今,咱们须要将学生数据保存到数据库,而后执行查询、修改和删除学生数据的操做。学生管理API的使用者调用的API以下:框架
前面的内容说到,API共享数据资源,而屏蔽内部实现,API的使用者(客户端)关注的是资源(读懂数据),并不须要了解API内部构造;API的提供者(服务端)只关注本身的内部实现,而不关系API使用者(客户端)的状态。为了加深对这一律念的理解,下面给出学生管理API的内部实现示例:
说明:
示例代码是基于Spring MVC进行实现的。
除了上述的内容以外,你还能够经过提供键值对的方式对查询数据进行过滤,如获取全部的学生数据时,只想获取性别为女性的学生数据,则能够经过这样的方式来完成:
[GET] http://www.example.com/students?gender=female
复制代码
Tip:若是API拥有对数据过滤的功能,对应服务端的API实现代码也须要作调整。
在前面的内容中,咱们提到RESTful API是REST API的非正式实现方式或规范。为何这么说呢?由于在RESTful API的设计中,咱们彻底能够经过GET的方式完成CURD操做,也能够经过DELETE行为来建立资源,经过POST行为来修改资源,它的实现方式并不严谨或者说并无严格按照REST API提出的约束条件来进行。因此说RESTful API是REST API的非正式实现方式。
如万维网联盟(W3C)所述,Web Service提供了在各类平台和/或框架上运行的不一样软件应用程序之间能够进行互操做的标准方法。Web Service的特色是具备良好的互操做性和可扩展性,以及因为使用XML而能够对程序处理过程进行描述。它们能够以松散耦合的方式组合不一样的服务以实现复杂的操做。提供简单服务的程序能够经过相互交互,以提供复杂的增值服务。
两个Web Service之间主要经过HTTP网络协议进行通讯,如咱们熟知的SOA(面向服务的体系架构),主要依赖于XML-RPC和SOAP(Simple Object Access Protocol,即简单对象访问协议)。
Tip:千万不要将SOA(面向服务体系架构)和SOAP(简单对象访问协议)搞混,前者是一种架构设计形式,后者是一种数据交换协议。
简单的一个示例:假设一个Web Service A提供容许其余应用程序经过URL获取用户信息的功能:[GET] www.abc.com/{id}。id是用户的… 没有任何关系,只要可以解析出服务A返回的XML文档便可。这样,应用程序之间交换数据就能够不用依赖于具体的语言和环境。这就比如不一样国家不一样语言的人,只要可以知晓对方语言的语法结构,两我的就能够进行交流。
使用Web Service有以下的几个优势:
目前,Web Service主要有两大流派:
下面,经过一张表格来对比REST与SOAP之间的异同:
如上所述,咱们了解了什么是API,什么是REST API,什么是RESTful API以及Web Service的相关概念。API表明应用程序编程接口,是一种较为宽泛的定义或者说是一种协议,做为软件程序之间相互通讯的接口而存在。REST API是API的一个子集,全部的REST API都是API;RESTful API是对REST API架构风格的一种非正式实现方式。API与Web Service都是服务提供者和服务消费者之间的通讯手段。最后,为了可以快速的识别API与Web Service之间的差别,将这两种手段的不一样之处整理成对照表以下: