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>
Name
Название параметра, по которому будет доступен в команде.
Обязательный атрибут.
Type
Тип значения передаваемого в параметре. Обязательный атрибут. Ожидается одно из значений:
Integer
Decimal
DateTime
String
File
Boolean
Json
Source
Источник в HTTP-запросе для получения значения параметра. Обязательный атрибут. Ожидается одно из значений:
FromQuery - возвращает значения из строки запроса
FormData - multipart/form-data
FromBody - возвращает значения из текста запроса
FromHeader - возвращает значения из заголовков HTTP
Required
Признак, обязательный параметр или нет. Необязательный атрибут. Ожидается логическое значение. По умолчанию атрибут имеет значение True.
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>
Name
Название поля, которое будет указываться в json-объекте в ответе на запрос.
Обязательный атрибут.
Array
Будет ли поле представлено как массив или скалярное значение.
Необязательный атрибут. Ожидается логическое значение.
По умолчанию используется значение False. Если указан тэг <Relation>
с именем этого объекта, то значение атрибута игнорируется и берется значение True.
Тэг <Relations>
<Relations>
Описывает отношение дополнительных полей между собой. Для указания вложенных объектов. Если не указан, то все таблицы - как самостоятельные поля json.
Необязательный тэг. Значение тэга <Relations>
: список тэгов <Relation>
.
Необходимо соблюдать порядок объявления тэгов <Relation>
для объектов с большой вложенностью: описываем каждый уровень последовательно, начиная с верхнего уровня, и проходя дерево в глубину.
Тэг <Relation>
<Relation>
Внешний ключ, по которому будет строиться зависимость вложенных объектов.
Необязательный тэг. Значение тэга <Relation>
: не ожидается.
Атрибуты тэга <Relation>
<Relation>
ChildObject
Подчинённый объект.
Обязательный атрибут. Ожидается имя одного из Object.
ChildField
Ссылающееся поле. Обязательный атрибут. Ожидается название поля подчинённого объекта.
ParentObject
Главный объект.
Обязательный атрибут. Ожидается имя одного из Object.
ParentField
Целевое поле. Обязательный атрибут. Ожидается название поля главного объекта.
Возможные ситуации с тэгом <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