Skip to content

1 API

Application Programming Interface

  • API 是一组用于构建和集成应用程序的definitions和protocals
  • API可以让你的产品/服务器在不知道其他产品/服务器是如何实现的情况下, 和它们进行交流.

Screenshot 2025-03-07 at 15.16.02

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通过让客户端指定所需的数据结构, 避免了这种问题, 客户端可以精确地获取所需的字段和关联数据, 避免了数据的浪费和不足.

Screenshot 2025-03-07 at 18.12.53

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在某些场景下的限制和挑战.