19个API安全最佳实践,助您实现安全
进一步理解API和SDK的区别及关系
如今,几乎所有应用程序都需要使用 API(应用程序编程接口)进行交互。 你可能会问:”为什么”? 因为应用程序接口(API)是安全、有选择性地向第三方传输数据的好方法。
所谓有选择性,是指您不需要向请求方公开所有数据。你可以抽象出部分数据,只分享你想分享的。
但这也有一个问题,对于非常复杂的应用程序来说,应用程序接口可能会变得繁琐乏味。 由于有100多个端点,API用户可能会发现难以以结构化的方式访问数据。
为了克服这种情况,SDK 被用来打包与应用程序接口相关的所有内容,使应用程序接口更易于使用。 SDK 不过是一个软件开发工具包,其中包含 API端点、API文档、API安全通讯和大量用于调用各种端点的抽象概念。
您可以为客户提供多种编程语言的SDK开发包,具体取决于您的客户群及其使用的语言,在开放API网络上,一般借助API文档工具来自动化生成多语言SDK,简化您的SDK维护。
API和SDK的区别及关系
- API是一种概念,SDK是一种程序类型。
- API是一种约定(例如SOAP API、RESTful API、RMI API等),SDK是对这种约定的一种实现,且必须符合API的约定,否则将无法达成两个应用程序交互的目标。
- API是应用程序对外暴露的一套远程交互协议(包括通讯协议、报文约定、安全及加密协议、调用方式等),SDK是API使用者在客户端的代码封装形式。
为API创建 SDK 的原因
以下是您的应用程序接口可能需要 SDK 的一些原因。
#1. 更容易使用应用程序接口
试想一下,用户界面中的一个特定组件会调用 10个不同的端点。 对于编写代码的人来说,调用不同的端点会不会很乏味? 是的,会,但有了 SDK,您就可以创建一个函数,为 API 用户实现开箱即用的功能。
// sdk
import { fetchUsersWithAccess } from "sdk";
const usersWithAccess = fetchUsersWithAccess(id);
#2. 默认最佳做法
您不希望您的客户在使用应用程序接口时采用不良做法。 因此,有了 SDK,您就可以实现某些安全功能,让用户可以安全地使用,而不必担心实现的问题。
#3 更好的错误处理
当新的开发团队使用您的应用程序接口时,错误信息是必不可少的。 如果他们做了一些意想不到的事情,他们应该能够找到根本原因。 而 SDK 可以帮助您生成更好、更全面的错误信息。
#4. 抽象 HTTP 客户端
为了进行 API 调用,您需要实现一个 HTTP 请求处理程序。 如果不想让用户自己处理 HTTP 请求,可以使用 SDK 对所有这些进行抽象。 SDK 实现可以处理 HTTP 版本、头信息、超时等。
#5. 执行适当的验证
SDK 可用于强制执行验证,例如强制执行函数参数及其数据类型。 这一点非常重要,可以确保应用程序接口用户不会输入错误信息,也不必自己添加验证。
开放API的SDK生成方式
1、手工编写,这种方式适合API安全通讯方式比较特殊的API接口,或者对性能有特殊要求的API接口。
2、借助API的SDK生成工具,这是当下主流的方式,适合大部分开放平台。
9种SDK生成工具
Speakeasy
Speakeasy 是一个 API 基础架构平台,您可以利用人工智能和生成 SDK 来改进您的 API。 它提供完全可定制的 SDK生成工具,支持多种编程语言,包括 Go、Python、Java 和 Typescript。
Speakeasy 生成的 SDK 重点关注这些关键方面,以改善开发人员的体验。
主要功能:
- 完全类型的
- OpenAPI支持
- 包括帮助程序和电池
- 简单易用
它还能帮助您创建 terraform 提供商,以提升 API 基础设施的水平。 不仅如此,使用 Speakeasy 生成内联文档也非常方便,而且与 API 规范保持一致。
他们为业余爱好和个人项目提供免费层级,为企业提供企业计划。
Apimatic
这是一个通过提供 API 门户、SDK生成工具和 API 转换器来帮助改善 API 开发人员体验的平台。 Apimatic 利用其核心引擎将 API 分解为四个基本组件:
转换器: 有助于规格和验证
设计器:用于规格合并和门户编辑
代码生成器:生成客户端库、代码示例和发布包
文档生成器:通过输入验证从规格生成文档
然后将这四个部分组合成您所需的应用程序接口解决方案。
它提供 14 天的免费试用期,但不包括免费层级。 对于公司和企业,它采用自定义定价模式。
Fern
Fern 专用于为API而生的 SDK生成工具。 它是 OpenAPI spec 的替代品,但如果您已经有了 OpenAPI spec,也可以导入它。 Fern 生成的 SDK 是惯用的,也就是说,它们利用了特定语言的功能,感觉就像手写的一样。
SDK 是可定制的,您可以在其中添加自定义逻辑。 此外,它还会自动生成联网逻辑和类型定义,这样您就可以只关注业务逻辑。
Fern 提供免费计划,最多可添加 3 个用户并使用所有生成器。 使用专业计划,您可以将 SDK 发布到 GitHub 仓库并同步到 Postman。
Liblab
Liblab 是一款语言原生、符合 SoC-2 标准的 SDK生成工具,内置身份验证、错误处理和 API安全功能。 您几乎可以获得其他SDK生成工具所具有的所有功能。
钩子用于将自定义代码注入 SDK 生成管道。 为此,Liblab 提供了一个名为 “钩子框架”(Hooks Framework)的完整框架。
不仅如此,您还可以使用 GitHub Actions 在向 GitHub 仓库提交内容时触发自动 SDK 和文档生成。
它对个人和业余项目免费,允许您探索 Liblab。 专业版具有一些高级功能,如自定义域、分析、安全警报和使用洞察。
Konfig
Konfig 可在您更改 API 规格时重新生成 SDK。 该SDK生成工具允许您导入 OpenAPI 规范或 Postman 集合,以自动生成并发布 SDK。
它支持所有主流语言,包括 Java、Typescript、Python、Go、C#、Ruby 等。 编写测试用例和输入验证不再是您需要担心的问题。
您可以安排一次演示,开始探索它。
Appwrite
Appwrite 的 SDK生成工具 是一个 PHP 库,用于生成 Typescript、Nodejs、Java、Kotlin、Go、Dart、Python 等多种编程语言的 SDK。 不过,在撰写本文时,它目前仅支持 Swagger 2.0 规范。 本 README 文件中列出了未来将支持的所有规范。
另外需要注意的是,这个 SDK 生成器仍在开发中,因此我不建议在生产中使用它。 此外,它还不支持 Postman 等主要规范。
REST United
REST United 是一款 SDK生成工具,可生成 9 种不同编程语言的 SDK。 只需五个步骤,您就可以生成 SDK:
- 定义端点
- 定义请求
- 定义响应
- 验证与测试
- 发布 SDK
支持的编程语言包括 PHP、Ruby、C#、Scala、Android、Objective-C、Java、Python 和 ActionScript(Flash)。 文档还可根据您的需求进行定制。
它提供 14 天的免费试用期,供您探索每个 API 最多 5 个端点的生成器。 企业计划基于自定义定价模式。
Swagger Codegen
Swagger Codegen 是一款开源SDK生成工具,用于为 OpenAPI 规范定义的 API 生成客户端 SDK。 API 定义文件可用于创建 Java、Scala 和 Ruby 等流行语言的库。 它支持 40 多种编程语言,还能为多达 20 种编程语言生成服务器模板代码。
通过 Swagger Hub 的免费层,您可以使用 API 编辑器、主机文档和模拟 API。 其企业计划至少允许 15 名设计人员和 30 名消费者使用。
Kiota
Kiota 是一款开源命令行SDK生成工具,用于生成 API 客户端库,以调用任何基于 OpenAPI 规范的 API。 它的 API SDK 提供了强类型的体验,具有高质量 SDK 的所有功能,但无需为每个 API 学习新的客户端库。
它支持 C#、Go、Python、Java、PHP、Python、Swift、Typescript 等多种编程语言。 Kiota 可以生成代码,在集成开发环境中实现自动完成,帮助发现 API 资源和方法。 此外,它还能完全访问 HTTP 功能。
总之
API的 SDK生成工具至关重要,因为它们能为使用您的应用程序接口的团队带来更好的开发体验。 这最终会带来更多的客户,因为他们发现您的 API 易于使用。 在选择 SDK 生成工具时,要注意语言支持和 API 规范支持。
扩展阅读
原文链接:9 Tools to Generate SDKs for Your APIs to Get More Customers