将多个参数传递给具有多个条件的Rest API

时间:2017-11-24 03:02:46

标签: c# rest http

我正在设计一个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级别进行解析。但显然,如果它有点复杂,它将需要更多的努力来专门解析查询。

有没有更好的方法来实施方案?

2 个答案:

答案 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