API_v3¶
Для работы с Мегапланом по API_v3 и обработки исходяших запросов на PHP доступна библиотека.
Здесь представлена общая информация про APIv3.
Описание всех методов и сущностей доступно внутри аккаунта Мегапалана по пути /api/v3/docs
.
Описание формируется с учётом версии аккаунта Мегаплана, для текущей версии, можно посмотреть здесь.
Все ресурсы APIv3 доступны по URLs с префиксом /api/v3/, например: GET /api/v3/currency
, возвращает JSON - массив сущностей валюты.
Вы можете посмотреть RAML-описание по адресу внутри аккаунта /api/v3
пример.
Все параметры запроса отправляются в виде JSON в теле запросов, а также в GET параметрах, например GET /api/v3/currency?{"limit": "3"}
.
Базовый ответ API:
{
"meta": {
"status": 200,
"errors": [ ],
"pagination": {
"count": 0,
"limit": 100
}
},
"data": [ ]
}
Ответ представляет собой два блока: meta
и data
.
Параметр data
содержит данные ответа.
Параметр meta
содержит дополнительную информацию:
Поле
Описание
status
Код ответа. Возможные варианта ответа приведены в таблице ниже
error
Описание ошибок
pagination
Информация о пагинации. Подробнее в разделе пагинации
Возможные коды ответа:
Код
Ответ
200
Успешный ответ
422
Ошибка в запросе
403
Ошибка доступа.
Аутентификация¶
Авторизационный токен нужно передавать с каждым запросом к API в заголовоке AUTHORIZATION
:
AUTHORIZATION: Bearer MmMzNDc1NTQzN...
Получить токен можно двумя способами:
Для приложений, при установке - из входящего параметра data->token, см. <a href=»/apps/events.html#apps-events»>события приложений</a>
Для авторизации с использованием логина и пароля пользователя - запросом POST /api/v3/auth/access_token, используя grant_type=password:
Например:
curl --request POST \
--url https://demo.megaplan.ru/api/v3/auth/access_token \
--header 'content-type: multipart/form-data;' \
--form username=[email protected] \
--form password=123 \
--form grant_type=password
Ответ:
{
"access_token": "YzE5OWEwM...",
"expires_in": 172800,
"token_type": "bearer",
"scope": null,
"refresh_token": "YTIzNTM4NW..."
}
Типы данных¶
APIv3 оперирует следующими типами данных:
Сущности
Сущность - это специальный тип данных для идентификации сложных ресурсов Мегаплана. Представляет из себя JSON объект с полям, среди которых обязательно присутствует contentType
, который содержит название сущности. Для передачи вложенной сущности достаточно передать ее contentType
и id.
Все поддерживаемые сущности описаны в разделе сущности.
Тип запроса влияет на количество полей в ответной сущности: если запрошена коллекция сущностей, то в ответ будут включены только базовые поля. Если необходимы все поля, то нужно запросить конкретную сущность по её id
.
Скалярные типы Скалярные типы включают в себя: integer, float, string.
Специальные типы Тип any может включать в себя все возможные типы. Тип BaseEntity может включать в себя все возможные сущности.
Линк-сущности В качестве вложенных сущностей (которые предназначены для ссылок, а не для сохранений) API ожидает, так называемые, линк-сущности - это сущности, у которых есть всего два поля: ContentType и id, которые однозначно могут ссылаться на конкретную сущность.
Коллекция сущностей Представляет из себя массив сущностей определенного типа.
Объединение сущностей Представляет из себя объединение нескольких типов сущностей, которые могут быть одновременно в одном поле.
Объединение коллекций сущностей Представляет из себя коллекцию сущностей, которая может содержать одновременно несколько типов сущностей.
Пагинация¶
Для пагинации коллекции используйте следующие GET параметры в запросе:
https://demo.megaplan.ru/api/v3/example?{"limit": 100, "pageAfter": {...} ... }
limit
указание макисмального количества сущностей в ответе. По умолчанию равен 100.
pageAfter
принимает линк-сущность и отобразит limit элементов, начиная с переданного.
pageBefore
принимает линк-сущность и отобразит limit элементов, перед переданным.
С пагинируемой коллекцией в metadata обязательно возвращается поле pagination с полями:
Поле
Описание
count
Общее количество сущностей по запросу
limit
Лимит количества сущностей в ответе
Загрузка файлов¶
В API3 в полях сущностей с типом файл устанавливается или отдаётся JSON с id и contentType сущности файл.
Например, вложения в сущности комментария
{
contentType: "Comment"
id: "777"
attaches: [
{
contentType: "File",
id: "888",
mimeType: "image/jpeg"
path: "/attach/SdfFileM_File/File/46/2/0f454c15da258dc3281f0a3c0bb2a1a2.jpeg/photo_2020-01-30%2019.13.10.jpeg",
.......
}
],
......
}
Для создания комментария или другой сущности с указанием файла, необходимо сначала загрузить файл, а потом указать сущность файла с contentType и id в создаваемой или изменяемой сущности.
Загрузка файла происходит через POST form-data:
curl 'https://demo.megaplan.ru/api/file'
-H 'content-type: multipart/form-data;'
-F 'files[]=@/path/to/file'
В ответ получаем id созданного файла. Используем потом его в нужной сущности при создании или редактировании