2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

一项针对数据库 URI 标准的提议

  • 2013-12-24
  • 本文字数:1696 字

    阅读完需:约 6 分钟

大卫·惠勒提出了一种用于数据库连接的标准 URI 格式。该提议将允许基于不同技术构建的应用程序共用相同的连接串。这对于包括报表设计器、自动构建和部署工具以及 ORM 在内的众多工具都是有好处的。该提议以 db 作为方案名,紧随其后是数据库引擎名。这是第一个与当前做法不同的地方。它没有指定具体的驱动程序,而是留给应用程序自己决定。

对于跨平台的 URI 标准而言,这是关键。由于连接到同样的数据库引擎常常需要不同的驱动程序名,所以在 JDBC、OleDB 和 ODBC 之间共用连接串非常困难。即使在一种 API 中,也可能有多种驱动程序可用。

在引擎名之后是一组标准化的参数:用户名、密码、主机、端口和数据库名。这些参数总是以相同的顺序出现,这是又一个与当前做法不同的地方。

  • db:engine://[username[:password]@]host[:port][/dbname][?params]
  • db:engine:[dbname][?params]

任何数据库在“?”之后指定参数都非常像 HTTP 请求的查询参数。这些参数会使用标准的键 - 值格式。

最后是一个可选段,用符号“#”表示,用于指定具体的表或视图。

有若干格式都是遵循 engine://authority/dbname 这一惯例,该格式即是受此启发。

有人对使用前缀“db:”提出了若干反对意见。彼得·艾森特劳特写到,

我认为前缀 db:是没有必要。首先,我认为,RFC 3986 的语法规则不允许有两个方案前缀。其次,它没用。假设一款软件能够使用这些 URI,那么它也将能够通过方案本身知道需要做什么。

通常,URL 确定了用于访问资源的协议,但它并不是资源的性质。例如,一个 git 库可以通过几种不同的方案访问。没有单独的 git:URL 系统,更不用说 scm:git 或者其它什么实现。另外,浏览器能够通过诸如 http:和 ftp:等几种不同的协议访问文件。没有单独的 textfile:或者 video:URL 方案。真见鬼,文件甚至可能是一个数据库,因此,我希望有个像 SQLite 的东西,可以接受典型的 http:URL 作为其数据库 URL。

除了要求实现者尽力忠实地遵循 RFC 3986 外,我不认为有很多东西需要标准化。

我们也可以反驳上述观点。例如,如果没有一个通用的前缀,开发人员将不得不在操作系统中为应用程序能够连接的每个数据库引擎注册一个单独的前缀。当遇到先前不知道的数据库时,这种方案会允许应用程序提示用户,而不是简单地失败。这类似于每个文件类型都一个单独的前缀,而不是仅仅使用 http/https,然后由浏览器决定做什么。

大卫·惠勒在其声明中提到了其它需要考虑的问题。

首先,权限部分必须包含一个主机地址的要求阻止了可用于连接 Unix 套接字的只包含一个用户名的 URI 规范。其中,PostgreSQL 和 MySQL 提供经过身份验证的套接字连接。 RFC 3986 需要主机名,而其前身 RFC 2396 并不需要。此外,作为先例,文件 URI 也不需要。因此,我正考虑允许使用类似的方式连接到 PostgreSQL 数据库:

db:pg://postgres:secr3t@/

总之,允许用户信息中没有主机名是有意义的。

第二个问题是在权限部分之后的路径部分中不允许相对文件名。这里的问题是,大部分数据库引擎并不使用路径作为数据库名,因此,前面的斜杠毫无意义。例如,在 db:pg:localhost/foo 中,PostgreSQL 数据库的名称是 foo,而不是 /foo。但在 db:firebird:localhost/foo 中,Firebird 数据库的名称是路径 /foo。这样,每一种引擎实现必须知道路径部分是否是一个文件名。

但实际上,有些数据库可能允许为本地连接指定路径,为远程连接指定名称。Informix 似乎就支持这种变体。那么如何知道路径是文件路径还是命名的数据库呢?这两种变体是无法区分的。

RFC 2396 非常明确地规定,当路径部分在权限部分的后面时必须是绝对路径。但是,RFC 3986 只在没有权限部分时才禁止双斜杠。因此,我认为,对于绝对路径,最好是有第二道斜杠。使用简单名称或者相对路径的引擎可以直接将它们放在第一道斜杠后面,而绝对路径可以使用第二道斜杠:

  • 绝对路径: db:firebird://localhost//tmp/test.gdb
  • 相对路径: db:firebird://localhost/db/test.gdb
  • 名称: db:postgresql://localhost/template1

查看英文原文:**** A Proposal for a Database URI Standard

2013-12-24 06:071735
用户头像

发布了 256 篇内容, 共 99.7 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

自动化流行于虚拟制作行业,Perforce推出免费API助力

龙智—DevSecOps解决方案

ci API Helix Core 虚拟制作

拥抱创新 争创一流 酷克数据入选北京市“专精特新中小企业”

酷克数据HashData

保姆级教程:带你体验华为云测试计划CodeArts TestPlan

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 7 月 PK 榜

提高网站可用性需要真家伙,华为云网站高可用解决方案有何亮点?

平平无奇爱好科技

Jmeter压测实战:Jmeter二次开发之自定义函数 | 京东云技术团队

京东科技开发者

测试 Jmeter 压测 企业号 7 月 PK 榜 插件化机制

云原生实力再获认可!腾讯云云原生拿下重量级奖项

极客天地

一文了解AppSec,以及如何通过Perforce工具保障应用程序防护

龙智—DevSecOps解决方案

APP开发 应用程序安全 AppSec

九章云极发布大模型时代下全新产品系列 ,逐浪算力x软件万亿级市场|TE洞察

TE智库

开源 大模型 AIGC

MAYA 2024和之前版本相比有哪些变化?

Finovy Cloud

推荐6款开源免费工具

伤感汤姆布利柏

华为扫地僧:揭秘IoT+鸿蒙帮助企业突围物联网安全问题

华为云开发者联盟

物联网 华为云 华为云开发者联盟 企业号 7 月 PK 榜

数据库中用户删除不掉总是报错,依赖如何处理干净?

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

​阻抗计算,真的没有那么难!

华秋PCB

工具 电路 阻抗 PCB PCB设计

分享6款常用的开源工具(白嫖党入)

树上有只程序猿

华为云专家出品《字节码编程指南》电子书上线

云计算 字节码编程 华为云

互联网高可用架构探讨 | 京东云技术团队

京东科技开发者

高可用 架构设计 硬件架构 网络架构 企业号 7 月 PK 榜

聊聊Excel解析:如何处理百万行EXCEL文件? | 京东云技术团队

京东科技开发者

POI 内存优化 企业号 7 月 PK 榜 excel解析

【直播预告】HarmonyOS极客松赋能直播第四期:HarmonyOS开发经验分享

HarmonyOS开发者

HarmonyOS

万字血书Vue—Vue语法

不在线第一只蜗牛

Vue 教程 语法

完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

单色和彩色LED显示屏

Dylan

场景 使用技巧 显示器 LED显示屏 全彩LED显示屏

关于序列化与反序列化MessagePack的实践 | 京东云技术团队

京东科技开发者

序列化 反序列化 企业号 7 月 PK 榜 MessagePack 字节序列

NFTScan | 06.26~07.02 NFT 市场热点汇总

NFT Research

热点 NFT\

《golong入门教程📚》,从零开始入门❤️(建议收藏⭐️)

不在线第一只蜗牛

教程 Go 语言

一项针对数据库URI标准的提议_语言 & 开发_Jonathan Allen_InfoQ精选文章