HTTP URL路径中分隔符的最佳实践

时间:2011-08-19 23:07:43

标签: api http url uri urlencode

在HTTP URL路径中使用各种标点符号是不明智的吗?我正在为API定义资源URL。这些资源URL必须由各种客户端和中间件访问,存储和传输,因此重要的是它们不包含可能导致问题的字符。

RFC 3986, section 2.2. "Reserved Characters"将以下字符指定为子级别:!$&'()* + ,; =

HTTP方案中的URL路径中是否有任何非法任意使用?

即使它们根据标准是合法的,但是由于不合规的软件,它们中的任何一个都很有可能导致实际的互操作性问题吗?

您是否在广泛部署的API中使用了以前使用过的任何特定子delim(这可以证明您使用的是安全的)?

动机是我们需要划分没有分层语义的键值对。我们正在考虑这样做:http://doriantaylor.com/policy/http-url-path-parameter-syntax。但是,如果这可能是一个问题,我们只会http://example.com/key1/value1/key2/value2

感谢

1 个答案:

答案 0 :(得分:0)

无论你走哪条路,都要确定;即使指定了版本,更改API也可能会出现问题。拥有同一资源的多个位置是一个坏主意 - 应该有一个规范位置。理论上你可以使用HTTP 301重定向,如果你担心兼容性,最好避免使用。

Dorian Taylor设定方案看起来合情合理(并且完全合法)并且不应该对任何系统(或任何不是非常大的错误)给出任何兼容性问题。

如果您的网址需要用作新网址中的参数,则正斜杠和等于必须为percent encoded,但对于标准查询字符串(?&=)和您的网址都是如此建议的替代方案,以及://如果包含协议。显然,如果你想在你的值中使用;,=,你需要对它们进行编码。

我能看到的唯一可能的问题是,您的网址是否存储在CSV中,但CSV库很常见,并且引用了特殊字符。