API是云原生应用的连接纽带,应用中的各个微服务组件通过API进行通信。随着应用不断发展和扩展,微服务和API的数量也会随之增加。尽管在大多数情况下这难以避免,但也给负责确保现代应用可靠性、可扩展性和安全性的平台运维团队带来了重大挑战。我们将这一问题称为API蔓延,并曾在之前的博客文章中对此进行过介绍。
为初步解决API蔓延问题,组织可能会尝试采用自上而下的方法,部署用于自动发现和修复API问题的工具。这种方法短期内虽有效,但往往会给负责构建和运营API及微服务的团队带来不必要的负担。他们要么必须重新设计现有微服务和API,以解决安全与合规问题;要么必须经历繁琐的审核流程,才能获得所需批准。因此,许多大型软件组织会采用去中心化方法,通过自适应治理,为开发人员提供所需的自主权。
与其在最后一刻才采取防护措施,不如采用自下而上的方法,从长远来看更为有效。负责为不同微服务和应用构建及运营API的团队会率先参与,通常会从在贵组织的软件开发中采用API优先方法开始。
什么是API优先?
API已存在数十年,但如今已不再只是“应用程序编程接口”。从本质上讲,API是面向开发者的接口。与任何用户界面一样,API也需要经过规划、设计和测试。API优先意味着,所有运营和使用API的团队都要认识到连接性和简洁性的重要性,并将其置于优先位置。它优先考虑API使用者所需的沟通、可复用性和功能,而这些使用者几乎都是开发者。
实现API 优先有多种路径,但对于大多数踏上API 优先之旅的公司而言,最终目标都是采用设计驱动的软件开发方法。在实践中,这种方法意味着在实施前完整定义API。首先要设计并记录API的运作方式。团队依据由此生成的工件(通常称为“API契约”)来确定如何实现应用功能。
阅读电子书第1章,探索支持持久且灵活的API优先软件开发方法的设计技术。该电子书由O’Reilly出版,书名为《精通API架构》,由NGINX免费提供。
API 优先对组织的价值
API 优先策略通常非常适合微服务架构,因为它可确保应用生态系统从一开始就具备模块化和可复用性。采用 API 优先的软件开发模式可为开发者和组织带来显著优势,包括:
- 提高开发人员的工作效率:开发团队可以并行工作,更新后端应用,而不会影响负责其他微服务的团队,即使这些微服务依赖相关应用的API。由于每个团队都可以参考既定的API契约,因此整个API生命周期内的协作通常更加顺畅。
- 改善开发者体验:API 优先设计通过确保 API 逻辑清晰且文档完善,将开发者体验置于优先位置,让开发者能够顺畅地与 API 交互。了解为何平台运维团队必须考虑 API 开发者体验<.htmla>。
- 一致的治理与安全:云架构师和平台架构师可在API设计阶段纳入安全与治理规则,以一致的方式组织API生态系统,从而避免在软件开发流程后期发现问题时进行成本高昂的审查。
- 提升软件质量:采用 API 优先设计,可确保在开发流程早期满足安全与合规要求,远在 API 准备部署到生产环境之前。由于无需在生产环境中投入过多精力修复安全缺陷,运维、质量和安全工程团队可以有更多时间与开发团队直接协作,确保在设计阶段达到质量与安全标准。
- 加快产品上市。减少依赖项并采用一致的服务间通信框架后,不同团队可以更高效地构建和改进服务。一致且机器可读的API规范有助于开发人员与平台运维团队更好地协作。
总体而言,采用 API 优先方法有助于企业构建更灵活、可扩展且安全的微服务架构。
采用通用API规范有何帮助
在典型的企业微服务和API环境中,涉及的组件数量往往超出平台运维团队日常跟踪的能力范围。采用标准的机器可读API规范,有助于团队了解和监控当前在其环境中运行的API,并据此做出决策。
采用通用API规范还有助于改善API设计阶段与利益相关方的协作。通过制定API契约并将其规范为标准规格,可以确保所有利益相关方对API的工作方式达成共识。这也有助于跨团队共享可复用的定义和功能。
目前有三种常见的API规范,每种都支持大多数类型的API:
- OpenAPI:所有Web API和Webhook的JSON或YAML描述
- AsyncAPI:事件驱动型API的JSON或YAML描述
- JSON Schema:以JSON描述API所使用的架构对象
目前,生产环境中的API大多是REST API,而OpenAPI Specification是编写REST API定义的标准方式。它提供机器可读的契约,用于描述特定API的工作方式。包括NGINX在内的多种API管理和API网关工具都广泛支持OpenAPI Specification。本文接下来将重点介绍如何使用OpenAPI Specification实现几个重要用例。
OpenAPI规范是一种开源格式,可使用JSON或YAML定义API。它可以包含多种API特征,如以下简单的API示例所示。在此示例中,一个简单的HTTP GET请求会返回虚构购物清单中的项目列表。
openapi: 3.0.0info:
version: 1.0.0
title: Grocery List API
description: An example API to illustrate the OpenAPI Specification
servers:
url: https://api.example.io/v1
paths:
/list:
get:
description: Returns a list of stuff on your grocery list
responses:
'200':
description: Successfully returned a list
content:
schema:
type: array
items:
type: object
properties:
item_name:
type: string遵循OpenAPI规范的定义既可供人阅读,也可供机器读取。这意味着可以通过单一可信来源记录每个API的工作方式,对于由多个团队构建和运营API的组织而言,这一点尤为重要。当然,要大规模管理、治理和保护API,还需确保API平台中的其他工具(包括API网关、开发者门户和高级安全工具)也支持OpenAPI规范。
深入了解如何使用OpenAPI规范设计REST API,请参阅《掌握API架构》第1章。
采用通用API规范的优势
采用通用API规范(如OpenAPI规范)有以下几项优势:
- 增强互操作性:采用通用的机器可读规范,意味着不同的系统和客户端都可以使用API契约。这有助于平台运维团队更轻松地集成、管理和监控复杂架构。
- 一致的文档:API契约采用标准格式记录,包括端点、请求和响应格式以及其他相关详细信息。许多系统可以利用该契约生成全面的文档,使信息更加清晰,便于开发人员了解如何使用API。
- 更完善的测试:API规范可用于自动生成并运行测试,有助于确保API实现遵循契约并按预期运行。这有助于在API发布到生产环境之前发现问题。
- 增强安全性:高级安全工具可以使用OpenAPI规范分析API流量和用户行为。这些工具可以通过验证API请求是否符合API端点支持的方法、端点和参数,实施正向安全策略<.htmla>。默认阻止不合规流量,从而减少微服务需要处理的调用次数。
- 更易于演进 ,API规范提供清晰、标准的方式,以机器和人类均可读的格式记录和传达变更,从而帮助API契约和应用本身持续演进。结合适当的版本控制实践,这有助于尽可能降低API变更对API使用者的影响,并确保API保持向后兼容。
总体而言,使用通用API规范有助于改善API的互操作性、文档编制、测试和安全性,并支持API逐步演进。
NGINX如何支持API优先的软件开发
NGINX提供一套轻量级云原生工具,可帮助您轻松大规模运营、监控、治理和保护API。例如,API Connectivity Manager是F5 NGINX Management Suite的一部分,可为API运营提供统一的管理平面。借助该工具,您可以配置和管理API网关及开发者门户。作为一款API优先工具,其所有功能均可通过REST API访问,便于DevOps团队实现CI/CD自动化和集成。
借助OpenAPI规范,可以使用NGINX产品执行以下操作:
使用OpenAPI规范将API发布到API网关,并将文档发布到开发者门户;还可通过CI/CD流水线或用户界面为WAF设置安全策略
将API发布到API网关
API Connectivity Manager使用OpenAPI规范简化API发布和管理。API开发人员可以通过NGINX Management Suite用户界面或完全声明式REST API,将API发布到API网关。API以API代理的形式添加到网关,其中包含API网关将传入的API请求定向到后端微服务所需的所有入口、后端和路由配置。可以使用Ansible等工具创建简单的CI/CD自动化脚本,通过REST API以代码方式部署和管理API。
有关使用OpenAPI规范发布API的完整说明,请参阅API Connectivity Manager文档。
为开发者门户生成API文档
维护文档往往令API团队头疼,而开发者门户上的文档过时也是API无序扩张的一个主要表现。API Connectivity Manager使用OpenAPI规范自动生成文档并将其发布到开发者门户,既能节省API开发人员的时间,也能确保API使用者随时找到所需内容。您可以直接通过API Connectivity Manager用户界面或REST API上传OpenAPI规范文件。
有关将API文档发布到开发者门户的完整说明,请参阅API Connectivity Manager文档。
应用正向安全策略,保护API端点
还可以使用OpenAPI规范,验证发送到NGINX Plus API网关的API请求是否符合该API支持的内容。通过应用正向安全模型(即定义允许的内容并阻止其他所有内容的安全模型),可以防止恶意请求探测后端服务中可能存在的漏洞。
撰写本文时,尚无法使用API Connectivity Manager配置NGINX App Protect WAF;此功能将于2023年晚些时候推出。不过,可以使用Instance Manager(NGINX Management Suite的另一个模块)和OpenAPI规范为WAF编写自定义策略。有关更多信息,请参阅NGINX App Protect WAF和Instance Manager的文档。
请参阅《精通API架构》第7章,详细了解API安全和威胁建模,以及如何在API网关应用身份验证和授权。
总结
采用 API 优先的方法构建微服务和应用,可以从多方面为贵组织带来益处。让各团队统一采用 OpenAPI 规范(或其他人类和机器均可读的通用 API 规范),有助于促进跨团队协作、沟通和运营。
现代应用在复杂的云原生环境中运行。采用支持以API优先方式运营API的工具,是实现API优先战略的关键一步。借助NGINX,可以使用OpenAPI规范,在分布式团队和环境中大规模管理API。
开始免费试用NGINX Management Suite 30天,试用期间可使用API Connectivity Manager、作为API网关的NGINX Plus,以及用于保护API的NGINX App Protect。
相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
