网络架构

盘点记录众多网络架构设计

api风格

image-20240609225554375

这张图展示了六种常见的Web API接口技术的对比和用途。每种技术的特性和适用场景如下:

  1. **SOAP (Simple Object Access Protocol)**:
    • 特性安全性和可靠性,基于XML的数据传输协议,通常用于企业级应用。
    • 用途:适用于需要高安全性和事务处理的复杂系统,如银行和电信系统。SOAP协议包括安全性、事务处理和消息传递等多个层面的标准。
    • 缺点: 体量太大,复杂又啰嗦
  2. **RESTful (Representational State Transfer)**:
    • 特性:基于资源的架构风格,常用于Web服务器。
    • 用途:广泛用于Web应用开发,通过标准的HTTP方法(如GET、POST、PUT、DELETE)进行操作。REST API以资源为中心,每个资源都有唯一的URI。
    • 缺点: 实时性不足
  3. GraphQL
    • 特性查询语言,用于减少网络负载。
    • 用途允许客户端指定需要的数据结构,从而优化数据获取过程,减少多余数据的传输。适用于需要高效数据查询的复杂应用,如社交网络和内容管理系统。
    • 缺点: 诞生目的是为了提供高效精准的数据,但GraphQL的学习曲线陡峭,服务端也需要更多处理(由于其灵活的查询能力)
  4. **gRPC (gRPC Remote Procedure Calls)**:
    • 特性:现代化,高性能,用于微服务架构。
    • 用途:适用于需要高吞吐量和低延迟的场景,如分布式系统和微服务。gRPC使用[Protocol Buffers](#Protocol Buffer)作为序列化格式,支持多种编程语言。
    • 缺点: 浏览器支持有限
  5. WebSocket
    • 特性实时,双向通信,持久连接,用于低延迟数据交换。
    • 用途:适用于需要实时通信的应用,如即时聊天、在线游戏和实时更新的仪表盘。WebSocket保持客户端与服务器之间的长连接,支持双向数据传输。
    • 缺点: 不需要实时数据的时候是不必要的开销
  6. Webhook
    • 特性:异步通信,用于事件驱动的应用。(通过http回调提供非同步操作)
    • 用途:适用于需要在特定事件发生时通知另一个系统的场景,如支付处理、持续集成/持续部署(CI/CD)流水线。Webhooks通过HTTP POST请求发送事件通知。例如Github使用Webhook通知自动系统
    • 缺点: 不支持同步通信和即时响应

API鉴权

优点

  • 只有授权客户端可以访问api
  • 不同的客户端可以访问不同的权限
  • 可以追踪谁在访问,什么时候访问

常见的API鉴权方式

下面所有方式都需要在HTTPS下才能保证安全性

HTTP基本验证

最简单的鉴权方式

image-20241118135936344

用户在HTTP头中发送base64编码的用户名和密码

虽然易于实现,但由于每次请求都会发送固定的凭据,因此这种请求方式在不使用HTTPS的时候是不安全的

API KEY验证

image-20241118140235904

API请求时,发送一个唯一的API密钥

实现简单,但是API密钥对于谁能发起请求控制有限

为防止被截获,同样使用HTTPS传输至关重要!

Json Web Token

简称JWT,是一种紧凑无状态的API验证机制

服务器不需要存储会话数据

image-20241118140630146

JWT验证已成为在可拓展无状态环境中保护API的首选方案

OAuth

当今使用最广泛的API验证机制

image-20241118140936996

OAuth允许用户通过google,facebook等第三方服务器进行验证,而无需将他们的凭证分享给API本身

OAuth2.0引入访问令牌的概念,这些令牌可以过期,可以被撤销,从而提供更细粒度的控制

与API授权的区别

  • API验证/鉴权: 决定了用户是谁

    登录网站是验证

  • API授权:决定了已验证用户拥有哪些权限(能做什么)