ApiMethod
Описывает API контроллер для обработки HTTP запросов.
Шаблон ApiMethod
Описание ApiMethod
Атрибуты ApiMethod
Name
Имя кастомного API-метода.
Обязательный атрибут. Значение атрибута Name
может быть любым, но уникальным среди всех описанных API-методов.
Route
Описывает конечную точку маршрута, по которому будет выполняться действие, описанное в ApiMethod.
Обязательный атрибут. Значение атрибута Route
: ожидается любое значение, допустимое в URL.
Полный маршрут будет иметь вид http://<host>:<port>/data_api/{Route}, где <host> и <port> - IP-адрес и порт компьютера, на котором запущена серверная часть. Например, для Route="user_list" URL будет иметь вид http://localhost:5005/data_api/user_list.
Method
Метод HTTP запроса.
Обязательный атрибут. Ожидается один из вариантов: Get, Post, Put или Delete.
Поле носит информативный характер.
VersionCode
Версия используемого кода.
Обязательный атрибут. Ожидается положительное число больше нуля.
По умолчанию равно текущей версии кода. Зарезервировано для разделения изменений кода и соблюдения обратной совместимости.
Тэги, специфичные для ApiMethod
Enabled
Признак активности api-метода (только v3).
Необязательный тэг. Ожидается логическое выражение, результат условия или константа.
Если тэг <Enabled>
отсутствует, то используется значение True.
Если значение тэга <Enabled>
равно False, то в ответ на запрос сервер вернет статус 404 Not Found.
Parameters
Параметры, передаваемые в запрос.
Необязательный тэг. В качестве значения тэга ожидается список тэгов <Parameter>
.
Тэг <Parameter>
<Parameter>
Параметр, который будет передан в команду при выполнении.
Необязательный тэг.
Атрибуты тэга <Parameter>
<Parameter>
1. Для FromBody
есть ограничение на обработку параметров относительно уровня вложенности объектов. В качестве параметров запроса можем указывать только поля основного объекта, которые принимают значение простых типов (строка, число, дата, логическое) и массив простых типов. Например, для объекта
мы укажем параметры "id"(Integer), "title"(String), но не можем указать параметры для "field1" и "field2". В этом случае мы должны указать параметр "object" с типом String. И вручную разбирать строку как json-объкт. PostgreSQL это позволяет.
2. Type="Array" будет возвращать массив строк.
Commands
Команды, выполняемые последовательно.
Необязательный тэг.
Полностью соответствует команде SequentialCommand на серверной части.
Во всех командах доступны все параметры описанные в тэге <Parameters>
.
Response
Описывает дополнительные поля в ответе на запрос.
Необязательный тэг. Значение тэга <Response>
: список тэгов <Objects>
и <Relations>
.
Если тэг <Response>
не указан, то по умолчанию в json-объекте будут поля "result_code" и "error", если при выполнении запроса возникли ошибки.
Тэг <Objects>
<Objects>
Описывает дополнительные поля в ответе на запрос.
Необязательный тэг. Значение тэга <Objects>
: список тэгов <Object>
.
Тэг <Object>
<Object>
Дополнительное поле в ответе на запрос.
Необязательный тэг. В качестве значения тэга <Object>
ожидается тэг <Command>
- обращение к команде. При этом если команда не выполнялась ранее, то она будет выполнена, иначе будет получено значение предыдущего выполнения. Так же можно обратится к конкретному параметру в результате команды по его имени через атрибут Parameter
.
Атрибуты тэга <Object>
<Object>
Тэг <Relations>
<Relations>
Описывает отношение дополнительных полей между собой. Для указания вложенных объектов. Если не указан, то все таблицы - как самостоятельные поля json.
Необязательный тэг. Значение тэга <Relations>
: список тэгов <Relation>
.
Необходимо соблюдать порядок объявления тэгов <Relation>
для объектов с большой вложенностью: описываем каждый уровень последовательно, начиная с верхнего уровня, и проходя дерево в глубину.
Тэг <Relation>
<Relation>
Внешний ключ, по которому будет строиться зависимость вложенных объектов.
Необязательный тэг. Значение тэга <Relation>
: не ожидается.
Атрибуты тэга <Relation>
<Relation>
Возможные ситуации с тэгом <Relation>
:
Указан неверный
ChildField
илиParentField
- при выполнении запроса вывалится ошибка KeyNotFoundException.Указан неверный
ChildObject
илиParentObject
- при выполнении запроса такой Relation будет игнорироваться.В качестве
ChildObject
иParentObject
указан один и тот же объект - выкинет ошибку при старте сервера.
Примеры
Простой пример на получение списка пользователей
URL запроса http://localhost:5005/data_api/user_list.
UserListSelectSqlQueryCommand - SqlQueryCommand с текстом select запроса на получения списка.
В качестве ответа будет получен json объект вида:
Пример обновления записи в базе
URL запроса http://localhost:5005/data_api/shift_inspection.
Тело запроса содержит объект:
ShiftInspectionUpdateSqlQueryCommand содержит запрос вида:
В качестве ответа вернется стандартный объект:
Пример построения вложенных объектов
URL запроса http://localhost:5005/data_api/inspections?user_id=41.
InspectionSelectSqlQueryCommand и DamageListSelectSqlQueryCommand - select запросы на получение списка записей для user_id = 41.
Вариант ответа:
Если бы в примере не был указан тэг <Relation>
, то ответ имел бы вид:
Пример передачи массива объектов в качестве параметра в теле запроса
URL запроса http://localhost:5005/data_api/get_fines.
Тело запроса:
Команда TestSqlQueryCommand содержит примерный код запроса:
После замены параметра будет иметь вид:
Примеры обработки результатов кастомных команд
DataTable
Вернёт первый элемент таблицы:
Вернёт значение поля "client" для первого элемента таблицы:
Вернёт массив всех строк таблицы:
Вернёт массив значений поля "client" для всех строк таблицы:
List<object> OR object[]
Вернёт первый элемент списка/массива:
Вернёт массив всех значений списка/массива:
Dictionary<string, object>
Вернёт первый элемент словаря:
Вернёт массив всех значений словаря:
Вернёт:
Вернёт:
List<Dictionary<string, object>>
Вернёт:
Вернёт:
Вернёт:
Вернёт:
Dictionary<string, List<Dictionary<string, object>>>
В процессе доработки!
добавить поддержку Array
Last updated