本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。
什么是 SQL for APIs?
SQL for APIs(面向 API 的 SQL)是一种设计模式,将 API 操作投影到关系语义上:列出和获取操作变为 SELECT,创建操作变为 INSERT,修改操作变为 UPDATE 或 REPLACE,移除操作变为 DELETE。API 的响应对象成为行;其属性成为列。该模式让任何 REST 或 RPC API 都具有数据库般的易用性,而无需 API 提供方做任何更改。
工作原理
这种映射是机械的,正因如此它才具有通用性:
| API 概念 | 关系概念 |
|---|---|
| Provider(AWS、GitHub) | schema 命名空间 |
| 服务(EC2、repos) | 子 schema |
| 资源集合 | 表 |
| 列出 / 获取操作 | SELECT 方法 |
| 创建操作 | INSERT 方法 |
| Patch / put 操作 | UPDATE / REPLACE 方法 |
| 删除操作 | DELETE 方法 |
| 其他生命周期操作(启动、停止、重启) | EXEC 方法 |
| 必需的路径参数或查询参数 | 必需的 WHERE 子句谓词 |
| 请求体字段 | 带 data__ 前缀的插入/更新列 |
在 StackQL 中,这种映射由扩展的 OpenAPI 规范生成,这些规范保存在开放的 StackQL Provider 注册表中。必需的 API 参数可在运行时发现:SHOW METHODS IN aws.ec2.instances 返回每个方法的 SQL 动词及其必需参数,因此人或 AI 智能体无需阅读 Provider 文档即可推导出正确的查询。
示例
读取是一条 SELECT,其 WHERE 子句携带 API 的必需参数:
SELECT name, language, stargazers_count
FROM github.repos.repos
WHERE org = 'stackql';
创建是一条 INSERT,其列携带请求体(带 data__ 前缀)和路由参数:
INSERT INTO google.storage.buckets(
project,
data__name,
data__location
)
SELECT
'my-project',
'my-new-bucket',
'US';
SHOW INSERT INTO google.storage.buckets 会机械地生成此模板,其中包含所有可写字段。
为什么存在
SQL 是现存部署最广泛的查询语言,拥有 50 年的工具积累:驱动程序、ORM、BI 平台、notebook,以及日益重要的 LLM 训练数据。每个主流 AI 模型都已经能够读写合格的 SQL。将 API 投影为 SQL,意味着所有这些工具和模型能力可立即适用于任何 API 接口面。另一种做法(每个 Provider、每种语言各一个 SDK)会使集成工作成倍增加,并且不给智能体提供任何可复用的东西。这一论点在为什么 SQL 是云 API 的强大接口中有进一步阐述。
相关概念
- 什么是 StackQL?:该模式面向云和 SaaS API 的参考实现
- 什么是可查询基础设施?:该模式所支撑的运作模式
- 为什么 SQL 是云 API 的强大接口:对设计依据的深入阐述
- StackQL 架构概述:映射是如何实现的
- 如何使用 StackQL 查询 GitHub 仓库:该模式在 SaaS API 上的应用