6

我们有 REST API。我试图找出使用一些特殊字符进行 Get 的最佳方法。

目前,我们有这样的东西:http: //myhost.com/api/book/name=HarryPotter

上面的 URL 工作得很好,但是当查询参数中包含某些特殊字符时会变得复杂,例如 '&' 或 '/',这将导致“没有找到匹配请求路径的操作 ... : / , 接受 : / ,

例如: http: //myhost.com/api/book/name=Dark/Thirty

这会将“Dark/Thirty”中的“/”视为 URL 分隔符。

能够搜索此类查询的最佳做法是什么。使用 JSON 是更好的做法,如果是,我应该使用 GET 还是 POST?我相信它应该是 POST,因为查询参数中的任何斜杠都被视为 Url 分隔符。

含义:即使这对于 GET 也会失败。http://myhost.com/api/book/search= {"name"="Dark/Thirty"}

而且由于这实际上不是 POST 我不想使用它。因为我只是列出符合我的搜索条件的书籍,而不是修改或添加任何内容。

有解决类似问题的指导方针吗?

4

2 回答 2

2

这个链接很好读。本质上,如果您Dark/Thirty是一个标识符(即唯一标识一个资源),则修改它(以可预测的模式),使其不具有特殊字符;例如,DarkThirtydark-thirty。但是,如果它是一个搜索词,那么最好不要将其设为 RESTful,而只是将其作为普通参数传递;这就是他们的目的。

GET和之间的区别POST不在于里面有什么人物,而在于目的是什么。GET用于获取东西:它应该没有副作用。搜索或检索页面应该是GET. POST影响服务器的更改。您不太可能需要进行一个操作,既需要发送比 URL 允许的更多的数据,同时又不对服务器进行任何更改,而只是呈现一个新页面(允许 Shazam 或 TinEye 等例外情况)。

处理 GET 参数中的特殊字符是 URL 编码的工作;如果您有http://myhost.com/api/search?q=Dark%FThirty进行搜索,那么您的网站同样出色。据我了解,REST 有两个主要驱动力:人性化和 SEO 友好性。搜索也不需要。据我了解,REST 的存在是为了识别资源;查询的搜索结果不是资源。

总而言之,我会选择:

于 2013-11-15T10:21:10.323 回答
-1

在您的情况下,URL 编码听起来是最简单的事情,特别是因为您已经为您的应用程序设置了一个 URL 结构,该结构看起来像是http://myhost.com/api/book/name={internal-identifier}解析internal-identifier为您的书名(当然是编码的)。

从 REST 的角度来看,URL 是否表示可以返回资源表示集合或唯一标识特定资源的查询并不特别重要。您可以将这种结构用于两者。

于 2013-11-15T19:04:08.067 回答