Как я могу использовать язык выражений для определения моего интерфейса API? - PullRequest
0 голосов
/ 01 мая 2020

Я хочу определить поисковый API в моем приложении, который позволяет клиенту предоставлять поисковые запросы в качестве выражения.

Поисковый запрос может включать конструкции, такие как поля, значения, условные операторы, логические операторы. Мое приложение считывало бы эти конструкции и преобразовывало бы в хранилище данных, задавая c запросов.

Прямо сейчас я определил свои поисковые конструкции следующим образом:

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-search ) говорит мне, что мы можем определить грамматику запроса и проанализировать ее, используя инструменты распознавания языка, такие как ANTLR4. Но для этого требуется написать собственный слой транслятора для преобразования дерева разбора в доменные / бизнес-объекты.

Я хотел бы знать, можем ли мы использовать любую стандартную библиотеку выражений для определения вышеуказанных конструкций в интерфейсе API.

Пожалуйста, дайте мне знать, если есть какие-либо стандартные рамки для определения базовых c поисковых конструкций в интерфейсе.

...