Как я могу использовать язык выражений для определения интерфейса API?
Я хочу определить в своем приложении поисковый API, который позволяет клиенту предоставлять поисковые запросы в виде выражения.
Поисковый запрос может включать такие конструкции, как поля, значения, условные операторы, логические операторы. Мое приложение будет читать эти конструкции и преобразовывать в конкретные запросы хранилища данных.
Прямо сейчас я определил свои поисковые конструкции, как показано ниже:
SearchExpression: {
Criteria c;
}
Criteria: {
SimpleCriteria sc; // is-a Criteria
ComplexCriteria cc; // is-a Criteria
}
SimpleCriteria: {
Field f;
ConditionalOperator cop;
Value v;
double weightage; // Search API will have it's own way of computing score of matching result,
// which may not suite to some of the clients. In such scenario, clients
// can specify weightage for each criteria.
}
ComplexCriteria: {
Criteria c1;
LogicalOperator lop;
Criteria c2;
}
ConditionalOperator: {
EQL;
NOT_EQL;
IN;
NOT_IN;
MATCH;
CONTAIN;
}
Field: {
TYPE_1;
TYPE_2;
}
Value: {
String stringValue;
Double doubleValue;
}
Мои первоначальные исследования (поиск в Google) говорят мне, что мы можем определить грамматику запроса и проанализировать ее с помощью таких инструментов распознавания языков, как ANTLR4. Но для этого необходимо написать наш собственный уровень транслятора для преобразования дерева синтаксического анализа в объекты домена / бизнеса.
Я хотел знать, можем ли мы использовать любую стандартную библиотеку выражений для определения вышеуказанных конструкций в интерфейсе API.
Пожалуйста, дайте мне знать, существует ли какая-либо стандартная структура для определения основных поисковых конструкций в интерфейсе.