网络架构
网络架构
ZEROKO14盘点记录众多网络架构设计
api风格
这张图展示了六种常见的Web API接口技术的对比和用途。每种技术的特性和适用场景如下:
- **SOAP (Simple Object Access Protocol)**:
- 特性:安全性和可靠性,基于XML的数据传输协议,通常用于企业级应用。
- 用途:适用于需要高安全性和事务处理的复杂系统,如银行和电信系统。SOAP协议包括安全性、事务处理和消息传递等多个层面的标准。
- 缺点: 体量太大,复杂又啰嗦
- **RESTful (Representational State Transfer)**:
- 特性:基于资源的架构风格,常用于Web服务器。
- 用途:广泛用于Web应用开发,通过标准的HTTP方法(如GET、POST、PUT、DELETE)进行操作。REST API以资源为中心,每个资源都有唯一的URI。
- 缺点: 实时性不足
- GraphQL:
- 特性:查询语言,用于减少网络负载。
- 用途:允许客户端指定需要的数据结构,从而优化数据获取过程,减少多余数据的传输。适用于需要高效数据查询的复杂应用,如社交网络和内容管理系统。
- 缺点: 诞生目的是为了提供高效精准的数据,但GraphQL的学习曲线陡峭,服务端也需要更多处理(由于其灵活的查询能力)
- **gRPC (gRPC Remote Procedure Calls)**:
- 特性:现代化,高性能,用于微服务架构。
- 用途:适用于需要高吞吐量和低延迟的场景,如分布式系统和微服务。gRPC使用[Protocol Buffers](#Protocol Buffer)作为序列化格式,支持多种编程语言。
- 缺点: 浏览器支持有限
- WebSocket:
- 特性:实时,双向通信,持久连接,用于低延迟数据交换。
- 用途:适用于需要实时通信的应用,如即时聊天、在线游戏和实时更新的仪表盘。WebSocket保持客户端与服务器之间的长连接,支持双向数据传输。
- 缺点: 不需要实时数据的时候是不必要的开销
- Webhook:
- 特性:异步通信,用于事件驱动的应用。(通过http回调提供非同步操作)
- 用途:适用于需要在特定事件发生时通知另一个系统的场景,如支付处理、持续集成/持续部署(CI/CD)流水线。Webhooks通过HTTP POST请求发送事件通知。例如Github使用Webhook通知自动系统
- 缺点: 不支持同步通信和即时响应
API鉴权
优点
- 只有授权客户端可以访问api
- 不同的客户端可以访问不同的权限
- 可以追踪谁在访问,什么时候访问
- …
常见的API鉴权方式
下面所有方式都需要在HTTPS下才能保证安全性
HTTP基本验证
最简单的鉴权方式
用户在HTTP头中发送base64编码的用户名和密码
虽然易于实现,但由于每次请求都会发送固定的凭据,因此这种请求方式在不使用HTTPS的时候是不安全的
API KEY验证
API请求时,发送一个唯一的API密钥
实现简单,但是API密钥对于谁能发起请求控制有限
为防止被截获,同样使用HTTPS传输至关重要!
Json Web Token
简称JWT,是一种紧凑无状态的API验证机制
服务器不需要存储会话数据
JWT验证已成为在可拓展无状态环境中保护API的首选方案
OAuth
当今使用最广泛的API验证机制
OAuth允许用户通过google,facebook等第三方服务器进行验证,而无需将他们的凭证分享给API本身
OAuth2.0引入访问令牌的概念,这些令牌可以过期,可以被撤销,从而提供更细粒度的控制
与API授权的区别
API验证/鉴权: 决定了用户是谁
登录网站是验证
API授权:决定了已验证用户拥有哪些权限(能做什么)
