了解 Rest API 开发中的 HTTP 方法
API 编排:简化 API 管理
在这个 API 时代,高效的管理和协调至关重要。API 编排已成为一种关键机制,可增强服务之间的通信和集成,从而提供无缝的用户体验。本文探讨了 API 编排的基础知识、其核心元素及其在现代 API 管理中的作用。
什么是 API 编排?
API编排增加了一层功能来协调传入请求、多个 API 服务和响应。它增强了不同服务之间的通信和集成,从而为用户带来统一的体验。
API 编排如何工作?
API 编排层支持不同服务之间的通信和集成,在提供单个响应之前处理对不同服务的多个调用。它确保流畅的前端体验,同时管理服务之间的权限、授权和安全性。
API 编排的核心元素
API编排功能一般包括如下功能:
- 集成:在前端和后端系统之间将数据转换为不同的格式,将新的 API 和服务与遗留系统集成。
- 数据转换:标准化数据格式以满足客户端和后端的期望,实现不同服务之间的通信。
- 逻辑工作流:在调用和响应之间添加逻辑工作流,以实现服务和数据格式之间的通信和协调。
- 自动化:自动化不同服务之间的复杂工作流程、操作和交互,以实现高效的流程和服务。
- 监控和错误通知:在抽象层面提供可观察性,以处理业务流程层的监控,并通过自动错误通知更快地检测和诊断错误。
- 身份验证和 API 安全:管理 API 和服务之间的身份验证和授权机制,以确保数据访问的安全。
- 缓存:通过缓存数据来减轻后端的负担,以提高性能并减少往返 API 请求的次数。
API 编排的痛点
API编排工具非常好用,但也存在7个痛点,分别是:
面向没有编程基础的普通用户服务
由于 API 编排具有“用户自助”的特性,注定了其用户“既是生产者又是消费者”。而任何网络平台的用户,都必须假定为“没有编程基础”,即面向没有编程经验的普通用户服务。
功能需要覆盖完备的编程元素
API 编排需要构造多个 API 调用,捕获和剪裁输出数据,同时也可能存在分支和根据条件重复处理等需求。
我们的编程启蒙老师一定都讲过,编程无非就是顺序+选择+循环。可见,编程所需所有元素,在 API 编排中皆有需求。然而,在我们的用户是没有编程基础的普通用户的情况下,如何让他们理解和描述要进行的操作,是另一个难题。
没有现成的编程语言可用
站在程序员的角度,在各种高级编程语言百家争鸣的今天,描述和实现“ API 编排”需求的方法有千万种。
静态语言有 C、C++、C#、JAVA、GO 等供我们选择,动态脚本语言有 Python、Lua、Perl、JavaScript、Ruby、Lisp 等多种选择。可以说任意组合一门静态语言+一门动态语言,都可以完美胜任我们的“动态 API 编排”任务。然而,当我们的用户被定义为“没有编程基础”,该问题就开始变得扑朔迷离。
后端 API 实现上的异构特性
由于微服务拆分的原则是让每个服务足够独立,对服务的实现语言和使用的技术,并不会做严格的限制,所以微服务天生就有异构的特性。
如果是同一个 team 开发各个子服务,可能会在 API 提供方式、调用方法上做一些简单约定。如果是由不同的 team 开发这些子服务,甚至还会存在 HTTP/RPC、RESTful/非 REST 这些可选项。如果需要兼容第三方 API,则还会存在编程语言差异,使用的技术差异等。
因此,对于一个对兼容性有足够考虑的 API 编排系统而言,承认和处理后端 API 的异构问题,是必然绕不过去的弯。
原子化的描述 API 的调用方法及构造输入输出参数
虽然 API 编排不是直接由程序员编写代码来构造一个 HTTP/RPC 调用来完成 API 访问,但其最终要实现的效果与前者高度一致。由于后端 API 天生的异构特性,使我们必须提供一种准确且易懂的描述方式,让用户告诉我们如下问题的答案:
- API 的访问地址在哪?采用何种调用协议?
- 是否需要身份认证?采用什么方法构造这个身份认证参数?构造身份认证参数的 API 私钥是什么?
- 输入数参数从哪里来?放到哪里去?是否需要做简单的算术运算?
- 输出数据是否需要进行加工?多个 API 的输出如何重新组装输出?
因此,描述和实现构造 API 调用参数的过程和方法,成为设计 API 编排系统中最关键的一环。
编排第三方 API 的身份认证问题
由于一般对外提供 API 服务的系统,都会加入身份认证功能,来保证 API 不会被非法调用,以此保证服务器安全与稳定。对于需要兼容第三方 API 的 API 编排系统而言,需要采用一种通用的描述方法,让实现 API 的第三方可以准确的描述自己实现的 API 所使用的身份认证方法。
常见的身份认证方法有:OIDC、 JWT、 bearer Tokens、Basic Auth、Signature、OAuth 2 等等。其中 Signature 认证方法只是使用“签名”认证方式的一种统称。实际上采用何种算法,使用什么步骤来构造这个“签名字符串”,都需要有统一的方法来详细描述。
说明:
常见的“签名”构造方法有:参数排序方法、追加字符串、计算 HASH 值、计算 HMAC HASH、AES/RSA 加密解密、hex/base64/url 编码解码等等。
由于第三方所使用的身份认证方法的多样性,且没有统一的标准,因此对 API 编排系统而言,如何原子化的定义和描述这些身份认证方法,也是一个不容忽视的大课题。
API 及 API 私钥的权限问题
API 私钥(如:登录网络平台的用户名密码)是用户访问第三方 API 平台的唯一身份证明数据,对用户数据安全有着至关重要的作用。大部分API网关采用对称加密方式,以简化API程序对接。
API 编排需要代理用户向第三方 API 服务器发起 API 调用请求,所以必须由用户提供此私钥才能完成该操作。
那么,问题的核心即变为,我们需要设计一套严密的安全体系,让用户信任我们的系统,将 API 私钥托管在平台是安全可信的。安全托管这些 API 私钥的必要环节包括:加密上传,加密存储,任何第三方用户使用需要授权,后端透明使用,内容对任何用户不可见。
API 网关是编排器吗?
虽然API网关 并非确切的 API 服务编排器,但它可以执行类似于编排的任务,例如缓存、监控和转换。不过,API 网关是 API 请求的统一入口点,通过 API 管理客户端和后端之间的交互,而编排层则管理工作流或分布式系统中多个任务或服务的执行。
API 组合与编排有什么区别?
API 组合是一种客户端驱动的方法,它指定数据要求并独立调用多个 API,聚合和组合满足客户端请求所需的各种 API 数据。另一方面,API 编排是一种集中式方法,其中服务编排器协调和管理多个 API 或微服务之间的顺序、依赖关系和数据流,以完成更广泛的业务流程或工作流。
API 编排工具
有各种 API 编排工具可用于满足不同的需求、偏好和技术堆栈。一些API网关都自带编排功能,探索16个适合现代应用程序的最佳API网关,选择合适的API网关。
一些开源API编排工具,可以集成到自有系统中,例如Apache Kafka和 Camel、Netflix Conductor 和 AWS Step Functions,它们根据您的需求和技术堆栈提供不同的 API 编排方法。
总之,API 编排在简化 API 管理、实现服务之间的高效通信和集成以及改善整体用户体验方面发挥着至关重要的作用。通过了解 API 编排的核心要素和优势,企业可以优化其 API 工作流程并增强其服务。
常见问题
- 什么是 API 编排?
API 编排是一种协调传入请求、多个 API 服务和响应以增强通信和集成的方法。 - API 编排如何工作?
API 编排的工作原理是实现不同服务之间的通信和集成,在提供单个响应之前处理对不同服务的多个调用。 - API 编排的核心元素是什么?
核心元素包括集成、数据转换、逻辑工作流、自动化、监控和错误通知、身份验证和 API 安全以及缓存。 - API 网关是编排器吗?
虽然 API 网关执行的任务与编排类似,但它是 API 请求的统一入口点,通过 API 管理客户端和后端之间的交互,而编排层则管理工作流或分布式系统中多个任务或服务的执行。 - API 组合和编排之间有什么区别?
API 组合是一种客户端驱动的方法,它指定数据要求并独立调用多个 API,而 API 编排是一种集中式方法,其中服务编排器协调和管理多个 API 或微服务之间的顺序、依赖关系和数据流