除了要求实现者尽力忠实地遵循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
转自 http://www.infoq.com/cn/news/2013/12/DB-URI-Standard |