【发布时间】:2014-05-26 17:08:54
【问题描述】:
我对 REST 很陌生,但我想做的是在我的 API 中实现一个(不是那么简单的)搜索功能。我想使用多个关键字(例如作者、书名、...)和不同的搜索运算符(例如 ~、=、!=、...)来搜索数据库。 我正在寻找类似约定、示例或“最佳实践”的教程——如何在路由参数等方面以优雅的方式做到这一点。
编辑:基本上我想知道如何以一种很好的方式在 URL 中包含属于每个关键字的运算符。
【问题讨论】:
我对 REST 很陌生,但我想做的是在我的 API 中实现一个(不是那么简单的)搜索功能。我想使用多个关键字(例如作者、书名、...)和不同的搜索运算符(例如 ~、=、!=、...)来搜索数据库。 我正在寻找类似约定、示例或“最佳实践”的教程——如何在路由参数等方面以优雅的方式做到这一点。
编辑:基本上我想知道如何以一种很好的方式在 URL 中包含属于每个关键字的运算符。
【问题讨论】:
首先检查 URI 模板标准。如果这对您来说足够了,并且您可以通过多个链接解决您的问题,那么您很幸运。
如果没有,那么您必须发回一些关于您的搜索查询的结构描述。首先,您必须选择一种查询语言。选择标准查询语言可能会更好,这样您就不必创建新语言。之后,您必须返回一些关于搜索查询约束的语义(可能在 RDF 中)。例如,您可以在文章标题中搜索单词并按日期对结果进行排序,等等......这种东西......所以客户端可以使用查询语言的详细信息、约束描述和用户输入。
查询被您的客户端合成后,您可以按以下格式发送:
GET /blah?q="query details" - 在单个查询参数中序列化的查询字符串,(查询语言可以是任何东西)GET /blah?query=x|details=z - 使用 URI 查询语言SEARCH /blah ... - 使用正确的 MIME 类型发送 SEARCH 正文(查询语言可以是任何东西,但请注意,SEARCH 方法可能不支持缓存,因为它是一种旧的 webdav 方法,没有维护标准)李>
所以关键问题是我们目前没有标准或 RDF 词汇来描述客户端的查询结构,因此发送查询链接可能会违反自描述约束并将客户端与服务耦合执行。 (对于大多数当前 API,客户端可重用性和满足 REST 约束都不是问题。)
【讨论】: