PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 30 篇文章
    • MySQL 10 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 3 篇文章
    • ProxySQL 2 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← 返回博客

SQL 是一种高级 API 吗?

发布于 2025年5月18日 作者 Sylvain ARBAUDIE
sql architecture api opinion
分享 X LinkedIn Facebook Email PDF
SQL 是一种高级 API 吗?

令人不安的问题

在现代软件架构中,一切都通过 API 进行通信。REST、GraphQL、gRPC——应用程序通过定义良好、文档完备、版本化的接口进行交互。但有一种 API 比所有这些都更早出现,无处不在,却从未被真正称为"API":SQL。

SQL 是一种标准化的声明式语言(ISO/IEC 9075),用于与结构化数据进行交互。你声明你想要什么,而不是如何获取。数据库引擎负责执行。从定义上来说,这就是一个编程接口——一种 API。

那么,为什么没有人把 SQL 当作 API 来对待?

SQL 作为 API:支持的论据

统一的数据访问

SQL 提供了对复杂数据的统一访问入口。无论是读取一行数据、关联十张表、聚合数百万行数据,还是批量修改数据,接口都是一样的:通过网络协议(例如 MariaDB / MySQL 协议)发送 SQL 语句。

这与 REST API 的做法完全相同:暴露一个统一的资源访问入口,具有清晰的语义(GET = 读取,POST = 创建,等等)。SQL 通过 SELECT、INSERT、UPDATE、DELETE 实现了同样的功能。

内置优化

当你调用一个 REST API 时,是你的后端代码决定如何执行请求。当你发送一条 SQL 查询时,是数据库的优化器来选择最佳执行计划。

SQL 优化器会分析查询,评估表的统计信息,考虑可用的索引,并生成最优的执行计划。这是一个很少有 API 能提供的抽象层:你说"要什么",系统决定"怎么做"。

细粒度的访问控制

SQL 内置了原生的访问控制系统。GRANT 和 REVOKE 允许精确控制谁可以对哪些数据执行什么操作。这等同于一个内置在 API 中的授权系统。

GRANT SELECT (product_name, price) ON catalog.products TO 'api_user'@'%';

这个用户可以读取产品的名称和价格,但无法查看内部成本和利润率。访问控制精确到列级别。

标准化

SQL 是一个 ISO 标准。尽管不同实现之间存在差异(MariaDB、MySQL、PostgreSQL、Oracle),语言的核心是通用的。一个掌握 SQL 的开发者可以与任何关系型数据库进行交互。

这是很少有 API 具备的优势。REST 并不是一个严格的标准(它是一种架构风格),GraphQL 是一个较新的标准,gRPC 则与 Protocol Buffers 绑定。SQL 已经拥有超过 40 年的标准化历程。

SQL 作为 API:反对的论据

需要专业知识

SQL 功能强大但也很复杂。编写一个简单的 SELECT 对任何开发者来说都不难。但要编写一个包含复杂关联、递归 CTE 和窗口函数的高性能查询,则需要相当深厚的专业知识。

一个良好的 REST/GraphQL API 会抽象掉这些复杂性:消费者不需要了解数据的物理组织方式。而使用 SQL 时,消费者必须理解数据库模式、表间关系以及性能约束。

SQL 注入

SQL 注入风险是"SQL 即 API"的阿喀琉斯之踵。如果消费者通过字符串拼接构建查询,数据就会面临危险。

# 危险——可能发生 SQL 注入
query = f"SELECT * FROM users WHERE name = '{user_input}'"

# 安全——参数化查询
query = "SELECT * FROM users WHERE name = %s"
cursor.execute(query, (user_input,))

REST/GraphQL API 从根本上不存在这个问题:接口与数据在设计上就是分离的。

缺乏连接管理

SQL 不处理 HTTP 会话、速率限制、标准化分页或 API 版本控制的概念。MariaDB / MySQL 协议管理连接,但没有与 HTTP 头、4xx/5xx 状态码或 HTTP 缓存机制等价的功能。

这些功能需要在 SQL 之上实现,通过代理(MaxScale、ProxySQL)或应用层来完成。

与数据库模式的耦合

直接暴露 SQL 会将消费者与数据库的物理模式耦合在一起。如果你重命名一个列、添加一张表或修改一个关系,消费者的所有 SQL 查询都必须更新。REST 或 GraphQL API 通过抽象层将消费者与这些变更隔离开来。

结论:是的,但是...

SQL 在功能上确实是一种高级 API。它满足了核心标准:标准化接口、声明式数据访问、内置优化、访问控制。

但它是一种需要专业知识才能正确使用的 API,如果使用不当会暴露安全风险,并且不提供现代管理机制(版本控制、速率限制、分页)。

最佳方案可能是混合模式:

  • SQL 作为内部 API,用于后端服务与数据库之间的通信,使用视图和存储过程作为抽象层
  • REST/GraphQL 作为外部 API,面向不需要了解物理模式的消费者

SQL 没有消亡。SQL 不是过时的工具。它是一种 API——软件生态系统中最古老、最强大、也最被低估的 API。


本文最初发表于 Medium。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept