我正在设计一个Rest搜索API,它可以接受多个参数作为过滤器。
例如:
https://test/api/GetCustomer?Filter=”FirstName=test||LastName=test||telephone=043232323”
上面的例子基本上会在提供的字段之间做一个Or。它将整个搜索字符串作为一个参数传递。我希望能够处理更复杂的查询以及以下内容:
https://test/api/GetCustomer?Filter=”(FirstName=test||LastName=test)&&telephone=043232323”
我不太确定实现端点的最佳方法是什么,从前端角度来看,将它作为单个参数传递更容易,而不是在API级别进行解析。但显然,如果它有点复杂,它将需要更多的努力来专门解析查询。
有没有更好的方法来实施方案?
答案 0 :(得分:1)
易用性是构建后端时最关心的问题之一。易于实施是遥远的第二步。通常,组合复杂查询要比解析复杂查询容易得多,因此前端开发人员能够以相对较小的努力构建非常强大的过滤代码;这是一件好事。
尽管解析权限有点复杂,但仍有用于管理复杂性的解析工具,例如ANTLR。虽然新工具的学习曲线可能有点陡峭,但最终您将获得一个强大的解析库,使前端开发人员可以轻松使用您的服务。
答案 1 :(得分:0)
var queryString = this.Request.GetQueryNameValuePairs();
List<KeyValuePair<string, object>> QueryStringKeys = new
List<KeyValuePair<string, object>>();
foreach (var pair in queryString)
{
QueryStringKeys.Add(new KeyValuePair<string, object>(pair.Key.ToString(), pair.Value));
}
Boolean firstvalue = true;
foreach (var keys in QueryStringKeys)
{
//access key.Key and key.Value here to make dynamic query
}
这可能不是最好的方法,但您可以将结果作为普通查询字符串变量传递
https://test/api/GetCustomer?FirstName=test&LastName=test&telephone=043232323