简单整理一下API的概念,最近看的有点多,都把自己看懵了。
API的概念
定义
API(Application Programming Interface)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。
也可以理解为是两个应用程序之间通信的机制,或者使用一组规则和协议的组件或计算机硬件。
目的
提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源代码,或理解内部工作机制的细节。
使用
API被编写并使用在以下几个地方:
- 基于web的应用程序
- 电脑操作系统
- 数据库系统
- 计算机硬件
- 软件库
上面是很广义的API的概念,包含了硬件和软件,但我们常说的API其实是很狭义的Web Service或者说 Web API。
Web Service
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。 ---- 百度百科
Web Service是API的实现,用于通过网络(通常是http或https)在2个应用程序之间进行通信。
所以Web Service和Web API是两个概念:
- Web service是包装在HTTP中的API
- Web service需要网络,然而,API不需要网络
- 所有的Web service都是APIs,但是并不是所有的API都是Web service
而实现Web Service的方式有三种: - RPC 远程过程调用的架构(Remote procedure call)【面向方法】
XML-RPC
JSON-RPC - SOA 面向服务的架构【面向消息】
SOAP协议 - REST 表现层状态转化的架构(Representational state transfer)【面向资源】
我们大多数时间最常接触到的就是REST风格的Web Service
REST
REST是Web服务的一种架构风格,一种设计风格,是一种思想,非协议也非规范。
简单看一下传统API设计以及REST API设计:
非REST设计:
http://localhost:8080/admin/getUser (查询用户)
http://localhost:8080/admin/addUser (新增用户)
http://localhost:8080/admin/updateUser (更新用户)
http://localhost:8080/admin/deleteUser (删除用户)
结论:以不同的URL(主要为使用动词)进行不同的操作。
REST架构:
GET http://localhost:8080/admin/user (查询用户)
POST http://localhost:8080/admin/user (新增用户)
PUT http://localhost:8080/admin/user (更新用户)
DELETE http://localhost:8080/admin/user (删除用户)
结论:URL只指定资源,以HTTP方法动词进行不同的操作。用HTTP STATUS/CODE定义操作结果。
RESTFul
我们经常说的RESTFul API又是什么?
其实,RESTful是一种常见的REST应用,是遵循REST风格的web服务,REST式的web Service是一种ROA(面向资源的架构)。并且有以下几个特点:
- 每一个
URI代表一种资源; - 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词(get、post、put、delete),对服务器端资源进行操作,实现“表现层状态转化”。
标准的RESTFul只有这四种操作GET、POST、PUT、DELETE。这四种动作对应资源的增删改查操作。
而我们还常接触的HEAD,PATCH其实不属于标准的RESTFul,可以理解为是开发人员以RESTful为标准约定的一种简单的方法。
所以目前我们所接触的应用是没有完全按照RESTFul风格进行开发的,都是基于RESTful风格进行开发。幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。
URI && URL
提到了URI,就简单记录一下URI 和 URL 的区别URI:统一资源标识符URL:统一资源定位符
所有的URL都是URI。
举个简单的例子,你知道CSDN的地址是https://www.csdn.net/,但如果你想阅读一篇关于API的文章,你不能通过https://www.csdn.net/这个地址去找到你想要阅读的文章,你需要在后面加上一定的参数,比如文章的id等等。
所以,https://www.csdn.net/就是一个URI,它只是标识了一个资源,但是并没有定位到某一具体的资源。
而某篇文章的具体地址就是URL,它定位了一个资源,你可以通过这个URL找寻到该文章的位置。
所以REST架构是面向资源的架构,它的每一条URL代表的就是一个具体的资源。
参考文献
【1】https://blog.csdn.net/javamine/article/details/89640426
【2】https://blog.csdn.net/x541211190/article/details/81141459