Simon Willison 发布了 Datasette 1.0a33 alpha。不是 1.0 正式版,但这次比普通小版本更值得看。
关键变化只有一个:?_extra= 这个 JSON 响应扩展机制,不再只覆盖 tables,现在扩展到了 queries 和 rows。更要紧的是,它进了文档。一个 API 设计从实验走进文档,意思就不一样了:它开始朝 1.0 的稳定接口收口。
1.0a33 改的是 JSON API 的选择权
| 问题 | 这次变化 | 直接影响 |
|---|---|---|
| 版本状态 | Datasette 1.0a33 alpha | 仍不能当稳定 1.0 使用 |
?_extra= 范围 | 从 tables 扩展到 queries、rows | 查询结果和行级响应也能按需加字段 |
| 文档状态 | 已写入 JSON API 文档 | 不再只是临时实验口子 |
| 演示工具 | extras API explorer | 可勾选 30 项 extras,看 JSON 响应变化 |
| AI 参与 | Claude Fable 5 规划,GPT-5.5 xhigh 实现 | 小型 API 工具的启动成本下降 |
?_extra= 解决的不是权限问题,也不是查询语言,更不是数据库性能优化。
它解决的是一个很具体的问题:调用 Datasette 的 JSON API 时,调用方到底想拿多少附加信息。
默认响应保持干净。需要列名、总数、计数 SQL、数据库名、数据库颜色、列类型等信息时,再通过 ?_extra= 点名要。比如请求某个表的 JSON 时,可以额外要求 columns 这类字段,而不是让服务端默认把所有元数据都塞进去。
这对两类人最直接。
插件作者要开始检查自己是不是依赖了旧的表级 extras,后面如果要支持 queries 和 rows,就要把扩展点想清楚。数据发布者和 API 使用者可以开始测试新文档里的写法,但最好先把它放在试验环境里,不要把 alpha 接口当成长期契约。
好 API 的分寸,是默认少给一点
我更看重的不是 30 项 extras,而是这个设计没有急着把响应做胖。
很多 API 走到 1.0 前,会忍不住把默认返回堆满。今天加一个 count,明天加一个 schema,后天再加一段调试信息。短期方便,长期麻烦。调用方开始依赖每一个字段,服务端也就越来越改不动。
Datasette 这次选了另一条路:默认响应尽量克制,复杂度由调用者声明。
这有点像早期 Web API 从“页面旁边顺手吐点 JSON”,走向“调用方明确选择自己要什么”。不完全一样,Datasette 也不是平台级革命。但权力结构相似:返回什么,不再完全由服务端替你决定。
“多则惑,少则得。”放在 API 上也成立。字段不是越多越体贴。默认路径越干净,长期维护越有余地。
?_extra= 的好处就在这里。它没有另起一套大协议,也没有把 Datasette 包装成 GraphQL。它只是沿着 URL 参数这个旧机制,把可选复杂度变成显式选择。
这类小设计很容易被低估。真正成熟的接口,往往不是功能最多,而是知道哪些东西不该默认给。
AI 做 explorer,是开发流程的信号,不是产品主菜
Simon 还做了一个 extras API explorer。Claude Fable 5 在 Claude Code 里负责规划,GPT-5.5 xhigh 在 Codex Desktop 里负责实现。这个工具可以勾选 30 项 extras,看请求 URL 和 JSON 响应怎么变。
别把它误读成 Datasette 的核心能力。它只是演示工具。
但它说明了一个现实变化:一次性开发者工具的启动成本正在下降。过去给 API 写一个 explorer,哪怕只是演示,也要花一段完整时间。现在有 AI 辅助,很多“以前懒得做”的解释层,会更容易被补出来。
问题也在这里。
AI 降低的是第一锤成本,不是维护成本。文档同步、边界条件、版本兼容、用户预期,这些账不会自动消失。工具一旦被人用起来,就会从“顺手做的 demo”变成“别人会依赖的入口”。
所以我不把这个 explorer 看成产品亮点。我更愿意把它看成 API 设计的压力测试:接口清楚,AI 很快能帮你做出解释层;接口混乱,AI 只会更快把混乱可视化。
接下来最该看两个变量。
一个是 ?_extra= 在 1.0 正式版前会不会继续稳定,包括 extras 名称、语义和 queries、rows 上的行为边界。另一个是插件作者会不会真正围绕它适配,而不是继续各写各的扩展返回。
如果这两件事走稳,1.0a33 就不只是一个 alpha 小版本。它更像 Datasette 在 1.0 前补上的一块接口地基:把选择权交给调用者,把实验写进文档,再用 AI 快速做出可交互说明。
小参数不小。它决定的是 API 以后会不会越长越乱。
