1 API
Application Programming Interface
- API 是一组用于构建和集成应用程序的definitions和protocals
- API可以让你的产品/服务器在不知道其他产品/服务器是如何实现的情况下, 和它们进行交流.
remote API (远程API)
2 Web API
- 早期Web API-以基于SOAP协议的API为例
- restful API
- 持续发展的不同风格API-以GraphQL API为例
2.1 早期Web API以基于SOAP协议的API为例
- 传统的Web应用通常使用基于SOAP(Simple Object Access Protocol)协议的API进行通信.
- 基于SOAP协议的API会使用XML格式来封装数据, 并通过HTTP或SMTP等传输协议进行通信
天气系统WebService:
http://www.webxml.com.cn/WebServices/WeatherWS.asmx
2.2 Resful API
- REST与 SOAP有着根本区别: SOAP是一种协议, 而REST是一种架构风格. 这意味着Resful Web API没有官方标准
只要API 符合Restful系统的6个导向性约束, 就算作Restful API:
- 客户端/服务器架构: REST架构由客户端, 服务器和资源构成, 通过HTTP来处理请求.
- 无状态: 请求所经过的服务器上不会存储任何客户端内容. 与会话状态相关的信息会存储在客户端上.
- 可缓存性: 通过缓存, 可免去客户端与服务器之间的某些交互.
- 分层系统: 客户机与服务器之间的交互可以通过额外的层来进行调解. 这些层可以提供额外的功能, 如负载均衡, 共享缓存或安全防护.
- 按需代码(可选): 服务器可通过传输可执行代码来扩展客户端的功能.
- 统一接口: 这项约束是RESTful API的设计核心, 共涵盖4个层面:
- 识别请求中的资源: 请求中的资源会被识别, 并与返回给客户端的表示内容分离开来.
- 通过不同的表示内容来操纵资源: 客户端会收到表示不同资源的文件. 这些表示内容必须提供的信息, 以便执行或删除操作.
- 自描述消息: 返回给客户端的每个消息都包含充足的信息, 用于指明客户端应该如何处理所收到的信息.
- 将超媒体作为应用状态的引擎: 在访问某个资源后, REST客户端应该能够通过超链接来发现当前可用的所有其他操作.
Restful API 特征:
- 以资源为基础: 资源可以是一个图片, 音乐, 一个XML格式, 大部分的文本资源都以JSON为载体.
- 统一接口: 从restful接口上你可能只能定位资源, 但是无法知晓它具体进行了什么操作, 需要具体了解发生了什么操作动作要从其HTTP请求方法(GET POST ...)上进行判断.
- Restful风格的API基于HTTP协议, 利用HTTP的方法(GET, POST, PUT, DELETE)和资源的URL来进行资源的增删改茶操作, 使得通信协议更加简化和标准化.
Eg:
GET: https://192.169.10.56:8080/company/emplyee?id=1
POST: https://192.169.10.56:8080/company/emplyee?id=1
加body
2.3 GraphQL API
持续发展的不同风格API-以GraphQL API 为例
- 减少多次请求: 传统的RESTful API一次请求只能返回一个资源, 而GraphQL API一次可以返回多个资源, 因此可以减少多次请求的次数.
- 避免过度获取和欠获取: 传统的RESTful API通常以预定义的数据结构返回数据, 导致客户端要么获取了过多的数据, 要么获取了不足的数据. GraphQL API通过让客户端指定所需的数据结构, 避免了这种问题, 客户端可以精确地获取所需的字段和关联数据, 避免了数据的浪费和不足.
Restful API
:
GET /users/1
// response
{
id: 1,
name: "John Doe",
posts: [11, 16]
}
GET /posts/1
// repsonse
{
id: 1,
title: "What is API",
content: "API is ...",
author: 1
}
graphQL API
:
//type
type Post{
id: ID!
title: String!
content: String!
author: ID!
}
type User{
id: ID!
name: String!
posts: [ID!]!
}
// request body
query{
user(id: "1"){
name
}
post(id: "1"){
title
}
}
// response
{
"data":{
"user":{
"name": "John Doe",
},
"post":{
"title": "What is API"
}
}
}
综上所述, GraphQL API的出现是为了提供更灵活, 高效和可定制的数据获取方式, 解决了传统RESTful API在某些场景下的限制和挑战.