Я создаю RESTful API с помощью Microsoft ASP.NET WebAPI. Моя проблема связана с методом GET или более точным, оптимальным решением для построения строк запроса/фильтрации в URL-адресах.Строка фильтра/строка запроса для RESTful API
В моем приложении API RESTful действует как прокси-сервер или точка доступа к моим ресурсам, хранящимся в базе данных. Он предназначен для извлечения, вставки, изменения или удаления записей. Вся система хранит только один тип сущности, который довольно сложный, поскольку он содержит множество различных полей, списков и данных в целом. Я использую NoSQL для хранения этих объектов, так как их довольно много.
Проблема заключается в создании правильной строки запроса для извлечения этих объектов по указанным критериям. Классическая строка запроса выглядит следующим образом:
http://localhost/api/entities?field1=val1&field2=val2&field10=val3
Что случилось с этим видом строки запроса является то, что оно только позволяет указать поле значения от оператора равенства, и там нет места для логических операторов между каждым полем (& лечатся как некоторый оператор И).
Что мне нужно, чтобы указать более сложные строки запроса, больше как фильтры. Я хочу, чтобы сказать системе, что я хочу, чтобы получить записи, которые имеют, например:
FIELD1> = значению1 ИЛИ FIELD2 = значение2 И field3 ~ value3
~ это указывает на то, что я хочу для сопоставления поля3 с value3 с использованием алгоритма FUZZY (хотя я не уверен, что ~ правильный символ, указывающий на намерение использовать нечеткий поиск).
Ну, как вы можете видеть, классическая строка запроса не способна поддерживать это. На данный момент я прохожу такую строку запроса:
http://localhost/api/entities?query=field1>=value1$OR$field2=value2$AND$field3~value3
я прохожу такой фильтр, как одну строку к методу моего контроллера и вручную разобрать его. Мой разделитель равен $, так как ASP.NET WebAPI будет автоматически разделять эти параметры, если между ними есть символ «&», и я не хочу, чтобы он это делал, потому что он не может отображать логические операторы (OR, AND, и т. д.) к параметрам метода в этом случае. Я не уверен, если я делаю правильные вещи, анализируя эту строку вручную (все после того, как символ «?»):
field1>=value1$OR$field2=value2$AND$field3~value3
Мой вопрос являются:
- Что такое правильный способ представляя такие запросы в URL-адресах API RESTful?
- Есть ли существующее решение для поддержки таких фильтров в ASP.NET WebAPI, кроме написания моего собственного алгоритма синтаксического анализа?
Ну, мои объекты данных имеют ту же схему свойств, что и в базе данных, но я использую NoSQL (ElasticSearch).Я не уверен, что OData - это решение, зависящее от базы данных, и если оно поддерживает NoSQL. –