在 5 分钟或更短时间内解释 API 架构

应用程序编程接口(API)是多数软件架构中不可或缺的组成部分。它为不同软件或服务之间的有效通信提供了基础。

API 通过公开必要的功能,同时隐藏敏感或私有数据,实现了抽象性。身份验证和授权机制帮助保护 API 免受未经授权的访问或数据篡改。

软件开发者利用各种 API,以结构化的方式构建、测试和优化软件系统。这使得他们能够通过一套预定义的规则或协议与软件系统进行交互。

什么是 API 网关?

在软件系统中,通常不止一个 API 来处理软件提供的每项服务;相反,多个 API 相互协作,向客户端发送数据。

顾名思义,API 网关充当各种 API 请求的入口点,并将这些请求路由到相应的 API 服务或微服务。这减轻了客户端直接向多个 API 发送请求的负担,从而提高了客户端的性能。

例如,一个食品配送应用可能会有针对餐厅、用户、供应商评分、配送伙伴评分、路径算法、地图服务等的微服务。因此,客户端(即最终用户应用)向单个 API 发出请求,然后由 API 网关将请求路由到相关的微服务,这样更加高效。

实施 API 网关的另一个显著好处是安全性。您可以设置多个身份验证和授权系统,以防止恶意用户滥用资源。

API 架构的构建模块

API 架构包含几个构建模块,以下是一些重要的组成部分:

#1. API 接口

API 接口清晰地定义了可以访问的方法或功能,而无需暴露其实现细节。它定义了一组必须遵守的规则和方法,用于检索或修改资源。

例如,在 RESTful API 中,您可以使用诸如 GET、PUT、POST、DELETE 等 HTTP 方法与资源进行交互。

#2. 路由控制器

控制器在 API 网关中扮演着关键角色,它们负责处理来自多个客户端的所有 API 流量,并将这些请求路由到相关的 API 服务。

此外,控制器还可以执行请求验证、响应处理以及身份验证等操作。

#3. 数据访问模型

数据库中的每个资源都具有特定的结构或形态,最好预先定义此结构,以便进行验证。这也被称为模式。来自客户端的请求负载可以根据模式进行验证,然后再添加到数据库中。

这有助于防止任何无效或被篡改的数据进入数据库。

API 架构的组件

  • API 服务:这些服务提供对特定资源或一组资源的访问。一个大型应用可能需要多个 API 服务。这些服务相互解耦,独立管理资源。
  • 文档:API 文档对于开发人员了解如何有效使用 API 以及其公开的方法至关重要。文档通常包括端点列表、最佳实践、请求格式、错误处理等信息。
  • 分析和监控:分析仪表板是一个关键组件,因为它提供了 API 流量、错误率、性能以及其他重要的指标和见解。

常用的 API 设计架构

REST – 表述性状态转移

REST 是一种 API 架构风格,它使用 HTTP 协议并支持客户端和服务器之间的无状态通信。

在 REST 中,资源由 URL 标识,每个资源都有特定的端点。REST 依赖于 HTTP 方法(如 GET、PUT、POST 等)来修改和创建资源。实现了 REST 架构的 API 被称为 RESTful API。

SOAP – 简单对象访问协议

SOAP 是一种基于 XML 的消息传递协议。SOAP 消息在 XML 文档中编码,并且可以从 SOAP 发送方传输到 SOAP 接收方。消息在到达接收方之前可能需要经过一个或多个服务。

SOAP 和 REST 的主要区别在于,REST 是一种依赖于 HTTP 的架构设计,而 SOAP 本身是一种协议,可以使用 HTTP、SMTP 等各种底层协议。SOAP 中的响应数据格式是 XML。

gRPC – 谷歌远程过程调用

远程过程调用 (RPC) 是一种技术,在这种技术中,客户端调用远程服务器上的函数,就像调用本地函数一样。gRPC 是谷歌开发的开源框架。它使用协议缓冲区(protocol buffers),这是一种与语言无关的方式来编写和编码结构化数据。

proto-buffers 中的数据由 gRPC 编译器编译,从而使其可互操作。例如,如果客户端代码是用 Java 编写的,而服务器代码是用 Go 编写的,那么 proto-buffers 中指定的数据与这两种语言都兼容。

GraphQL

GraphQL 是一种用于构建 API 的开源查询语言和运行时。它允许客户端通过访问单个入口点或端点来访问多个资源。特定资源不绑定到特定端点。您可以获得在请求查询中指定的内容。

您需要为特定查询定义一个强类型模式,以及一个将为该查询执行的解析器函数。为了修改资源,您需要在 GraphQL 中指定一个变异查询。

API 架构部署 – 最佳实践

无论您的 API 架构设计得多么出色,如果它在生产环境中表现不佳,那么它就失去了价值。它必须能够适应真实世界的场景。以下是一些关键的实践,可以帮助您的 API 架构为生产环境做好准备:

✅ 使用 API 网关

API 网关有助于高效地路由 API 查询。API 网关还可以处理安全和验证任务。

✅ 执行 API 测试

在启动之前,请确保您的 API 已经过全面的功能、集成和性能测试。自动化测试框架可以简化这个过程。

✅ 关注可扩展性

创建可扩展的 API 架构,以应对不断增长的流量需求。要根据需要动态调整 API 实例的数量,请考虑采用自动缩放技术。

✅ 明智地选择托管

选择能够提供可扩展解决方案的托管服务提供商,以应对不断增长的流量和客户需求。请注意诸如负载平衡、自动缩放以及按需灵活分配更多资源等功能。

确保托管服务提供商能够满足您 API 的性能需求,尤其是在需求高峰期。此外,如果适合您的业务需求,可以探索无服务器选项。

如何选择合适的 API 架构?

选择 API 架构取决于以下几个因素:

  • 业务需求:分析需要通过 API 实现的业务目标,并了解应用程序的工作流程。
  • 用例:首先要问的问题是为什么需要 API。确定不同的用例将有助于您更好地设计或选择 API 架构。
  • 可扩展性:同样,了解业务需求和用例将有助于您设计可扩展且高性能的 API 架构。
  • 开发者体验:确保 API 架构易于理解,以便新的开发人员可以轻松上手,而不会遇到任何麻烦。
  • 安全性:安全性可能是 API 架构最重要的方面。确保您的 API 架构足够安全,并符合相关的隐私法规。

接下来,我们将探索一些学习资源,以提高您的 API 架构设计技能。

学习资源

#1. 掌握 API 架构:设计、操作和发展基于 API 的系统

本书将帮助您学习 API 的基本知识,并探索设计、构建和测试 API 的实用方法。

它还将教您如何操作、配置和部署 API 系统。这本书涵盖了从 API 网关、服务网格、安全性、TLS 和 OAuth2 到不断发展的现有系统等所有内容。

#2. 软件架构:REST API 设计 – 完整指南

如果您对学习 RESTful API 及其设计方式感兴趣,那么本软件架构课程非常适合您。

它涵盖了身份验证、授权、记录 REST API 以及各种性能优化技术。它的优点是它涵盖了 HTTP 基础知识和 Postman API 测试工具。

#3. REST API 设计、开发和管理

本课程重点介绍了 Swagger、Apigee 和 Mulesoft 等各种 API 管理平台的教程。本课程面向那些想要探索 REST API 的应用程序并对构建它们感兴趣的人。

#4. 设计 RESTful API:从头开始学习设计 API

从头开始创建 REST API 是您将从本课程中学习到的关于 RESTful API 设计的内容。请求、响应、API 设计和操作是涵盖的一些有用的主题。如果您是仍在学习 REST 基础知识的初学者,那么这个课程值得您尝试。

最后的话

您可以根据您的业务目标和技术目标,综合考虑集成需求、性能考虑、安全要求以及未来的可伸缩性和可扩展性,选择最佳的 API 架构。

接下来,使用这些课程和资源开启您的软件测试之旅。