我对REST很陌生,但我想要做的是为我的API实现一个(不是那么简单的)搜索功能。我想使用多个关键字(例如author,booktitle,...)和不同的搜索运算符(例如〜,=,!=,...)来搜索数据库。 我正在寻找的东西就像一个约定,一个例子或一个“最佳实践”教程,如何在路由参数等方面以优雅的方式做到这一点。
编辑:基本上我想知道如何以一种很好的方式将属于每个关键字的运算符包含在URL中。
答案 0 :(得分:1)
首先检查URI模板标准。如果它足够了,你可以用多个链接解决你的问题,那么你很幸运。
如果没有,那么您必须发回一些有关搜索查询的结构说明。首先,您必须选择查询语言。选择标准查询语言可能更好,因此您不必创建新的语言。之后,您必须发回一些关于搜索查询约束的语义(可能在RDF中)。例如,您可以搜索文章标题中的单词并按日期排序结果,依此类推......这种东西......所以客户端可以使用查询语言的详细信息,约束描述和用户输入。
客户合成查询后,您可以采用以下格式发送:
GET /blah?q="query details"
- 在单个查询参数中序列化的查询字符串,(查询语言可以是任何内容)GET /blah?query=x|details=z
- 使用URI查询语言SEARCH /blah ...
- 使用正确的MIME类型发送SEARCH正文(查询语言可以是任何内容,但请注意,SEARCH方法可能不支持缓存,因为它是一个旧的webdav方法而不是保持标准)因此,我们目前没有标准或RDF词汇描述客户端的查询结构的关键问题,因此发送查询链接可能会违反自我描述性约束并将客户端耦合到服务实施。 (通过大多数当前API,客户端可重用性和履行REST约束不是问题。)