
云原生 API 网关 APISIX 入门教程
导读:在这份学习指南中,我们将和大家一起了解 REST、GraphQL 和异步 API 的优缺点,以及这三种技术在现实生活中的理想用例。
API 在现代软件开发领域在发挥着举足轻重的作用。
目前,有三种主流类型的API,可用于在各个系统之间建立通信与数据交换。最前沿最流行是 REST 方法,这种方法因其简单和可扩展性,已经在行业中占据主导地位。
伴随着技术的发展,开发者与企业的需求也发生着变化。近年来,由Facebook开源的 GraphQL 和异步事件驱动 API 等替代方案也开始出现。与传统的 REST API 相比,它们具有更明显的优势。
在本文中,我们将详细研究每种 API 技术,并将它们做比较和展开理解,希望对感兴趣的小伙伴有些许帮助。
REST 架构围绕实体资源的概念展开。这些实体可通过标准 HTTP 方法进行管理,
例如 GET、POST、PUT 和 DELETE。
REST 的关键特征之一就是无状态,其中来自客户端的每个请求都包含服务器完成该请求所需的所有信息。
这种方法可以将客户端和服务器解耦,彼此可以独立扩展。
当然,REST架构也存在一些缺点:
GraphQL:进行声明式数据获取API的兴起
GraphQL 是用于查询数据的开源语言以及用于完成这些查询的运行时的组合。
GraphQL 背后的关键原则是采用分层结构来定义数据查询,让客户端在单个请求中精确指定所需的数据。
图 2 GraphQL 架构概览
在很多方面,GraphQL 都是对 REST API 架构相关问题的直接对应。
而且它还促进了API的强类型模式,为开发者提供了更清晰的预期。在技术改良方法,GraphQL 通过订阅方式支持实时数据更新。
经过多年的发展,创始者 Facebook以及众多生态公司,比如在 GraphQL Federation 等工具上进行了大量工作,从而使 GraphQL API 对于多个领域的大型企业系统具备更良好的可扩展性。
GraphQL 也有它的缺点,包括如下的几点:
近些年来,采用或迁移到云原生架构的推动催生了事件驱动架构,其优点是组件之间无阻塞通信的良好前景。
使用异步 API,客户端无需等待响应即可继续操作,也就是可以发送请求的同时继续执行过程。
这种方法对于需要高并发性、可扩展性和响应性的场景是非常有利的。
在事件驱动的系统中,异步 API 在Apache Kafka或RabbitMQ等工具的帮助下处理事件和消息,这些技术提供了消息生产者和消费者之间的通信媒介。
典型使用事件驱动 API 方法的系统原理,先让生产者将事件发布到主题,而消费者订阅这些主题,用以异步接收和处理事件。这样允许无缝的可扩展性和容错能力,因为生产者和消费者都可以独立发展。
下图就向大家展示了这样一个系统:
图 3 具有 Kafka 和异步 API 的事件驱动系统
异步 API 有如下的关键优势:
如同其它 API 类型一样,异步 API 也存在以下几个缺点:
与 REST 和 GraphQL API 两种API类型相比,异步 API 也有一些合适的理想用例,包括如下:
REST、GraphQL 和异步 API 的综合比较
前面我们已经详细研究了三种类型的 API 架构。现在是时候对它们进行并排综合比较了,以便大家在开发前做出更好的决策与选择。
下表显示了三种类型几个关键参数的比较:
表 1 比较 REST、GraphQL 与异步 API
范围 | REST API | GraphQL API | 异步API |
数据获取方式 | 使用预定义节点获取数据 | 客户在查询中指定确切的数据要求 | 数据以异步消息的形式传递 |
性能和可扩展性 | 非常适合可扩展的应用;可能会遇到过度获取和获取不足的问题 | 可扩展;嵌套查询可能会出现问题 | 高度可扩展;高效的实时数据处理 |
灵活性和易用性 | 查询数据的灵活性有限 | 数据查询灵活性高 | 查询数据的灵活性有限,需要了解事件驱动的方法 |
开发者经验和学习曲线 | 资料完善且为许多开发者所熟悉 | 理解 GraphQL 语法的学习曲线适中 | 更陡峭的学习曲线 |
实时能力 | 实时功能有限,依赖轮询和 Webhooks 等关联技术进行更新 | 通过订阅实现实时功能 | 专为实时数据处理而设计;非常适合流媒体实时应用 |
工具和生态系统支持 | 丰富的工具和生态系统支持 | 不断发展的生态系统 | 需要专门的工具,例如 RabbitMQ 或 Kafka 等消息传递平台 |
在本文中,我们共同探讨了不同 API 架构之间的主要区别,分别是:REST、GraphQL 与异步 API。
此外,还详解了特定类型的 API 可能比其它类型更适合的场景。
展望未来,API 开发格局有望进一步转型,包括机器学习、边缘计算和物联网等新兴技术将推动新的需求,从而推动 API 方法的更快发展。此外,随着分布式系统的高速发展和升级,API 将在通信方面发挥更关键与重要作用。
作为开发者,了解每种 API 样式的优点和局限性并选择最适合给定需求的方法非常重要。
这样的心态,可以帮助我们充满信心地驾驭当下的 API 领域。
本文章转载微信公众号@21CTO