avril_api
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| avril_api [2017/01/19 11:55] – [Logging in] kalaschnikow | avril_api [2018/04/23 15:57] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Avril REST API ====== | ||
| + | |||
| + | Version 1.0.10 | ||
| + | |||
| + | ===== Introduction ===== | ||
| + | |||
| + | Протокол представляет собой набор HTTP/REST команд клиент-серверного взаимодействия. Данные содержатся в JSON формате в теле HTTP. | ||
| + | |||
| + | Внимание! | ||
| + | Адресная строка, | ||
| + | При запросе HTTP-PUT, если в теле JSON запроса отсутствуют какие-либо необязательные параметры (null-значения допустимы), | ||
| + | |||
| + | Серверная часть реализует полный набор CRUD операций над объектами, | ||
| + | * CREATE (HTTP-POST) – создание нового объекта; | ||
| + | * READ (HTTP-GET) – получение информации об объекте; | ||
| + | * UPDATE (HTTP-PUT) – обновление существующего в БД объекта, | ||
| + | * DELETE (HTTP-DELETE) – удаление существующего в БД объекта. | ||
| + | |||
| + | ==== REST Services Names ==== | ||
| + | Серверный REST-сервис называется AvrilDock. | ||
| + | |||
| + | Адрес сервиса: | ||
| + | |||
| + | , где: | ||
| + | %host% – хост, на котором развернуто серверное приложение; | ||
| + | %port% – порт, на котором развернуто серверное приложение; | ||
| + | %service% -имя сервиса (группы команд). | ||
| + | |||
| + | Example: | ||
| + | http:// | ||
| + | |||
| + | ==== Exceptions ==== | ||
| + | При отсутствии исключительных ситуаций в JSON теле ответного сообщения значение по ключу errCode = 0. При возникновении исключения при обработке запроса в JSON теле значение по ключу errCode < 0 (подробнее в разделе списка кодов ошибок), | ||
| + | |||
| + | ==== Command groups ==== | ||
| + | * Работа с организациями (organizationservice) | ||
| + | * Работа с нарядами (jobservice) | ||
| + | * Работа с пользователями (userservice) | ||
| + | * Работа со справочником статусов нарядов (stateservice) | ||
| + | * Работа со справочником срочностей нарядов (urgencyservice) | ||
| + | |||
| + | |||
| + | |||
| + | ==== Request service status ==== | ||
| + | |||
| + | Каждый сервис имеет функционал проверки статуса с помощью HTTP-GET запроса по адресу: | ||
| + | http:// | ||
| + | |||
| + | В теле ответа функционирующий сервис возвращает JSON следующего вида: | ||
| + | {" | ||
| + | |||
| + | ===== Logging in ===== | ||
| + | Before working with Avril API it is necessary to fetch a session token through the login procedure. It can be made with HTTP-POST request to the following URL: | ||
| + | |||
| + | http:// | ||
| + | |||
| + | Example: | ||
| + | http:// | ||
| + | |||
| + | The body should contain the following information: | ||
| + | |||
| + | client_id=avril-web& | ||
| + | |||
| + | where: | ||
| + | %username% - user name of the user, which should be logged in\\ | ||
| + | %password% - the password of this user\\ | ||
| + | |||
| + | If the login information is right, the server replies with status "200 OK" and the response body like this: | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | where: | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | |||
| + | |||
| + | The most important field is here the // | ||
| + | | ||
| + | Caution: the port which is used in this request, is normally not the same, which is used in all other requests! Because the authentication service runs on other Wildfly instance. This means for our first phase that here the port 8180 should be used, but in all other requests 8080. | ||
| + | |||
| + | ===== Working with Organizations (organizationservice) ===== | ||
| + | |||
| + | Команды данной группы относятся к адресу: | ||
| + | |||
| + | http:// | ||
| + | |||
| + | ==== Access ==== | ||
| + | * create, update, delete - superadmin | ||
| + | * read – all users of particular organization | ||
| + | |||
| + | ==== Organization Object ==== | ||
| + | |||
| + | Элементами объекта являются: | ||
| + | * id (unique identifier of an organization, | ||
| + | * addMS (серверная дата и время в миллисекундах создания) | ||
| + | * updMS (серверная дата и время в миллисекундах последнего обновления) | ||
| + | * name (имя) - обязательный | ||
| + | * country (страна) - необязательный | ||
| + | * city (город) – необязательный | ||
| + | * address (адрес) – необязательный | ||
| + | * postCode (почтовый индекс) – необязательный | ||
| + | |||
| + | ==== Create new organization ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-POST по адресу: | ||
| + | |||
| + | В теле JSON с элементами: | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | http-state = CREATED | ||
| + | |||
| + | |||
| + | ==== Update organization ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-PUT по адресу: | ||
| + | |||
| + | В теле JSON с элементами: | ||
| + | |||
| + | В случае отсутствия объекта в БД новый объект будет создан. | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | В случае обновления http-статус = OK. | ||
| + | |||
| + | В случае попытки обновления помеченного на удаление объекта http-статус ответного сообщения = NOT_FOUND | ||
| + | В случае создания результат аналогичен п.1. | ||
| + | |||
| + | ==== Delete Organization ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-DELETE по адресу: | ||
| + | , где %id% - идентификатор организации для удаления. | ||
| + | При запросе удаления объекта происходит обновление поля delMS объекта на текущую дату и время сервера. | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | При успешном выполнении http-статус = OK. | ||
| + | В случае отсутствия объекта в БД, либо если объект уже был помечен на удаление http-статус = NOT_FOUND. | ||
| + | |||
| + | ==== Get all organizations ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск всех не удаленных (delMS=0) объектов организаций. | ||
| + | |||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск всех не удаленных (delMS=0) объектов организаций, | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | http-статус ответного сообщения = OK, в теле массив организаций organizations в JSON (может быть пустой, | ||
| + | |||
| + | ==== Get Organization ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск организации с идентификатором %id%, которая не была удалена. | ||
| + | |||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск организации с идентификатором %id%, которая была обновлена после %updMS% и не была удалена. | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | http-статус ответного сообщения = OK, в теле организация organization в JSON. | ||
| + | В случае отсутствия организации по заданным условиям http-статус ответного сообщения = NOT_FOUND. | ||
| + | |||
| + | |||
| + | ===== Working with tasks (jobservice) ===== | ||
| + | |||
| + | Команды данной группы относятся к адресу: | ||
| + | http:// | ||
| + | |||
| + | ==== Access ==== | ||
| + | |||
| + | * create, update, delete – superadmin, admin | ||
| + | * read – any registered user | ||
| + | |||
| + | ==== Task object ==== | ||
| + | |||
| + | The important task object elements are: | ||
| + | * id - | ||
| + | * addMS - task creation timestamp in millis | ||
| + | * updMS - update timestamp in millis, | ||
| + | * userId - id of user, which is assigned to this task | ||
| + | * orgId - organization id of current organization | ||
| + | * urgencyId - usually: 1 - high, 2 - normal, 3 - low | ||
| + | * stateId - task status | ||
| + | * resolvedMS - resolved timestamp in millis | ||
| + | * delMS - deleted timestamp in millis | ||
| + | * title - task title | ||
| + | * description - task description | ||
| + | * field1 - field5 - custom fields (" | ||
| + | * address - address text | ||
| + | * latitude - latitude | ||
| + | * longitude - longitude | ||
| + | * questionnaireId - id of associated questionnaire, | ||
| + | * questionnaireQuestions - questionnaire questions | ||
| + | * questionnaireAnswers - questionnaire answers | ||
| + | * resolved - boolean flag indicating if this task is resolved or not | ||
| + | |||
| + | |||
| + | ==== Create New Task ==== | ||
| + | === Request === | ||
| + | HTTP-POST по адресу: | ||
| + | |||
| + | В теле JSON с элементами: | ||
| + | * userId (обязательный), | ||
| + | * orgId (обязательный), | ||
| + | * urgencyId (обязательный), | ||
| + | * stateId (обязательный), | ||
| + | * title | ||
| + | * description | ||
| + | * address | ||
| + | * latitude | ||
| + | * longitude | ||
| + | * description | ||
| + | * field1 | ||
| + | * field2 | ||
| + | * field3 | ||
| + | * field4 | ||
| + | * field5 | ||
| + | |||
| + | |||
| + | Регистрирует новый наряд в БД с привязкой к пользователю и проекту. | ||
| + | |||
| + | === Response === | ||
| + | |||
| + | http-статус = CREATED. В теле id созданного наряда в JSON. | ||
| + | |||
| + | ==== Update task ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-PUT по адресу: | ||
| + | |||
| + | В теле JSON с элементами: | ||
| + | * id, | ||
| + | * userId (mandatory), | ||
| + | * projectId (mandatory), | ||
| + | * urgencyId (mandatory), | ||
| + | * stateId (mandatory), | ||
| + | * title (mandatory), | ||
| + | * description, | ||
| + | * field1 – field5. | ||
| + | |||
| + | Если id не задан или наряда с таким id не существует, | ||
| + | |||
| + | === Response === | ||
| + | В случае обновления http-статус = OK.\\ | ||
| + | В случае попытки обновления помеченного на удаление объекта http-статус ответного сообщения = NOT_FOUND\\ | ||
| + | В случае создания результат аналогичен п.1.\\ | ||
| + | |||
| + | ==== Delete task ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-DELETE по адресу: | ||
| + | |||
| + | / | ||
| + | |||
| + | ,где %id% - id наряда для удаления. | ||
| + | |||
| + | При запросе удаления объекта происходит обновление поля delMS объекта на текущую дату и время сервера. | ||
| + | |||
| + | === Response === | ||
| + | При успешном выполнении http-статус = OK.\\ | ||
| + | В случае отсутствия объекта в БД, либо если объект уже был помечен на удаление http-статус = NOT_FOUND.\\ | ||
| + | |||
| + | ==== Get all tasks ==== | ||
| + | |||
| + | === Request (all) === | ||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | /jobservice | ||
| + | |||
| + | Выполняет поиск всех не удаленных (delMS=0) объектов нарядов | ||
| + | |||
| + | === Request (all changed after specific timestamp) === | ||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | / | ||
| + | |||
| + | Выполняет поиск всех не удаленных (delMS=0) объектов нарядов, | ||
| + | |||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле массив нарядов jobs в JSON (может быть пустой, | ||
| + | Простой пользователь получит массив нарядов, | ||
| + | |||
| + | ==== Get task by id ==== | ||
| + | === Request === | ||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск наряда с идентификатором %id%, который не был удален. | ||
| + | |||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | Выполняет поиск наряда с идентификатором %id%, который был обновлен после %updMS% и не был удален. | ||
| + | |||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле проект project в JSON. | ||
| + | В случае отсутствия наряда по заданным условиям http-статус ответного сообщения = NOT_FOUND. | ||
| + | |||
| + | „Ordinary“ user (NOT admin) will receive the task only if this task is assigned to him. | ||
| + | |||
| + | |||
| + | ===== Working with Users (userservice) ===== | ||
| + | |||
| + | Команды данной группы относятся к адресу: | ||
| + | |||
| + | http:// | ||
| + | ==== Доступ ==== | ||
| + | * create – superadmin | ||
| + | * update, delete – superadmin, admin | ||
| + | * read – все (простые пользователи имеют доступ только к собственному объекту) | ||
| + | |||
| + | ==== Объект «Пользователь» ==== | ||
| + | |||
| + | Элементами объекта являются: | ||
| + | * id (уникальный глобальный id пользователя) – обязательный | ||
| + | * updMS (серверная дата и время в миллисекундах последнего обновления) | ||
| + | * orgId (идентификатор организации пользователя) – обязательный | ||
| + | |||
| + | ==== Создание нового пользователя ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-POST по адресу: | ||
| + | В теле JSON с элементами: | ||
| + | Регистрирует пользователя в БД с привязкой к организации. | ||
| + | Если id не задан, происходит выполнение запроса по текущему пользователю. | ||
| + | === Response === | ||
| + | |||
| + | http-статус = CREATED. | ||
| + | |||
| + | ==== Обновление пользователя ==== | ||
| + | |||
| + | === Request === | ||
| + | Запрос аналогичен п.1, но id – обязательный. | ||
| + | В случае отсутствия объекта в БД новый объект будет создан. | ||
| + | === Response === | ||
| + | |||
| + | В случае обновления http-статус = OK. | ||
| + | В случае попытки обновления помеченного на удаление объекта http-статус ответного сообщения = NOT_FOUND | ||
| + | В случае создания результат аналогичен п.1. | ||
| + | |||
| + | ==== Удаление пользователя ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-DELETE по адресу: | ||
| + | , где %id% - идентификатор пользователя для удаления. | ||
| + | При запросе удаления объекта происходит обновление поля delMS объекта на текущую дату и время сервера. | ||
| + | === Response === | ||
| + | |||
| + | При успешном выполнении http-статус = OK. | ||
| + | В случае отсутствия объекта в БД, либо если объект уже был помечен на удаление http-статус = NOT_FOUND. | ||
| + | |||
| + | ==== Получение всех пользователей ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | Выполняет поиск всех не удаленных (delMS=0) объектов. | ||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле массив пользователей users в JSON (может быть пустой, | ||
| + | |||
| + | Если в элементе массива users отсутствует orgId, то это означает, | ||
| + | |||
| + | ==== Получение пользователя ==== | ||
| + | |||
| + | === Request === | ||
| + | |||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | http:// | ||
| + | |||
| + | Выполняет поиск не удаленного (delMS=0) объекта по заданному id. | ||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле объект пользователя user в JSON. | ||
| + | Если у пользователя user отсутствует orgId, то это означает, | ||
| + | В случае отсутствия пользователя по заданным условиям http-статус ответного сообщения = NOT_FOUND. | ||
| + | |||
| + | ===== Working with Statuses (stateservice) ===== | ||
| + | |||
| + | Команды данной группы относятся к адресу: | ||
| + | |||
| + | http:// | ||
| + | |||
| + | ==== Access ==== | ||
| + | read - все | ||
| + | |||
| + | ==== Status Object ==== | ||
| + | |||
| + | Элементами объекта являются: | ||
| + | |||
| + | id (уникальный глобальный id статуса)\\ | ||
| + | name (имя статуса)\\ | ||
| + | |||
| + | ==== Get all work order statuses ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле массив статусов states в JSON (может быть пустой, | ||
| + | |||
| + | ===== Working with Urgencies (urgencyservice) ===== | ||
| + | |||
| + | Команды данной группы относятся к адресу: | ||
| + | http:// | ||
| + | |||
| + | ==== Access ==== | ||
| + | read - все | ||
| + | |||
| + | ==== Объект «Срочность» ==== | ||
| + | |||
| + | Элементами объекта являются: | ||
| + | id (уникальный глобальный id срочности)\\ | ||
| + | name (имя срочности)\\ | ||
| + | |||
| + | ==== Get All Urgencies ==== | ||
| + | |||
| + | === Request === | ||
| + | HTTP-GET по адресу: | ||
| + | |||
| + | === Response === | ||
| + | http-статус ответного сообщения = OK, в теле массив срочностей urgencies в JSON (может быть пустой, | ||
| + | |||
| + | ===== Error codes ===== | ||
| + | При успешной обработке запроса в теле JSON ответного сообщения | ||
| + | При возникновении исключения или конфликтной ситуации при обработке запроса в JSON значение ошибки по ключу errCode < 0 и имеется errMsg. HTTP-статус ответного сообщения соответствует типу возникшей ошибки. | ||
| + | |||
| + | Возможные HTTP-статусы ответного сообщения: | ||
| + | OK – запрос успешно выполнен | ||
| + | CREATED – объект успешно создан | ||
| + | BAD_REQUEST – некорректный запрос | ||
| + | NOT_MODIFIED – ошибка создания/ | ||
| + | NOT_FOUND – объект удален (помечен на удаление) или не найден | ||
| + | CONFLICT – при выполнении запроса возникла конфликтная ситуация (как правило, | ||
| + | INTERNAL_SERVER_ERROR – ошибка при работе с БД/ | ||
| + | |||
| + | Возможные коды ошибок в JSON теле ответного сообщения: | ||
| + | <code java> | ||
| + | int ERR_UNKNOWN = -1; | ||
| + | | ||
| + | // Database errors | ||
| + | int ERR_DATASOURCE_INVALID = -2; | ||
| + | int ERR_SQLQUERY_EXECUTION_FAILED = -3; | ||
| + | int ERR_SQLQUERY_PREPARING_PARAMS_FAILED = -4; | ||
| + | int ERR_DUBLICATE_UNIQUE_NAME = -5; | ||
| + | |||
| + | // Common system errors | ||
| + | ERR_NO_SUCH_USER = -6; | ||
| + | ERR_INCORRECT_INPUT_PARAMETERS = -7; | ||
| + | |||
| + | // OrganizationService errors | ||
| + | ERR_CREATE_ORG_DB = -8; | ||
| + | ERR_UPDATE_ORG_DB = -9; | ||
| + | ERR_DELETE_ORG_DB = -10; | ||
| + | ERR_SELECT_ORG_DB = -11; | ||
| + | |||
| + | // UserService errors | ||
| + | ERR_CREATE_USER_DB = -12; | ||
| + | ERR_UPDATE_USER_DB = -13; | ||
| + | ERR_DELETE_USER_DB = -14; | ||
| + | ERR_SELECT_USER_DB = -15; | ||
| + | ERR_SELECT_USER_KEYCLOAK = -16; | ||
| + | |||
| + | // ProjectService errors | ||
| + | ERR_CREATE_PROJ_DB = -17; | ||
| + | ERR_UPDATE_PROJ_DB = -18; | ||
| + | ERR_DELETE_PROJ_DB = -19; | ||
| + | ERR_SELECT_PROJ_DB = -20; | ||
| + | |||
| + | // JobService errors | ||
| + | ERR_CREATE_JOB_DB = -21; | ||
| + | ERR_UPDATE_JOB_DB = -22; | ||
| + | ERR_DELETE_JOB_DB = -23; | ||
| + | ERR_SELECT_JOB_DB = -24; | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== How to test API ===== | ||
| + | To test API it is possible to use several REST Clients. I've used [[https:// | ||
