Общие правила¶
Формат запроса¶
Все запросы, кроме запроса авторизации, требуют специльных заголовков аутентификации.
URL любого API-запроса составляется следующим образом:
https://demo.megaplan.ru/<URI_команды>
Например, для аккаунта с именем someaccount запрос на получение списка задач, в фоормате JSON, будет следующим:
http://someaccount.megaplan.ru/BumsTaskApiV01/Task/list.api
Параметры запроса могут быть переданы как через GET, так и через POST. Для запросов получения данных рекомендуется пользоваться методом GET. Для добавления/изменения данных рекомендуется пользоваться методом POST.
GET-параметры необходимо передавать стандартным образом, добавляя в URL-запроса. Например:
https://someaccount.megaplan.ru/BumsCommonApiV01/User/authorize.xml?Login=name&Password=md5pass
Ответ на любой запрос содержит JSON или XML со следующими аттрибутами:
params - значения входных параметров (если функция таковые поддерживает);
data - выходные данные (список или один объект); формат зависит от функции и приводится в ее описании; аттрибут может отсутствовать;
status - статус ответа с аттрибутами:
code - код ответа (ok или error);
message - текстовое описание статуса (например, суть ошибки).
Формат ответа определяется по расширению в конце запроса. Расширение .api возвращает данные в формате JSON. Расширение .xml возвращает данные в формате XML. Подробнее различие в форматах можно посмотреть на примере получения списка задач.
Пример ответа в JSON-формате¶
{
"status":
{
"code":"ok",
"message":null
},
"params":
{
// список входных параметров
},
"data":
{
// формат данных зависит от команды API и описан в документации команды
}
}
Пример ответа в XML-формате¶
<?xml version="1.0" encoding="utf-8"?>
<response>
<status>
<code>ok</code>
<message></message>
</status>
<params>
// список входных параметров
</params>
<data>
// формат данных зависит от команды API и описан в документации команды
</data>
</response>
Для упрощения механизма клиентского кэширования, API поддерживает пару стандартных HTTP-заголовков ETag и If-None-Match. Каждый ответ на GET-запрос к API содержит заголовок ETag с хэшом, который уникально идентифицирует ответ. Значение хэша не изменяется до тех пор, пока не изменится содержание тела ответа.
Если в повторный запрос добавить заголовок If-None-Match, содержащий ранее полученный хэш, то в ответ на такой запрос вернется либо статус 200 OK
с новым значением ETag (если ответ изменился), либо статус 304 Not Modified
с пустым телом ответа (если ответ не изменился).
Помимо этого в ответе поддерживаются HTTP-заголовки серверных ошибок 400, 401, 403, 404, 500. В остальных случаях код ответа будет 200.
Ограничения API¶
Частота запросов к API ограничена 10 запросами в секунду на аккаунт.
Подсказка: запрос авторизации и получения ключей доступа не стоит выполнять каждый раз, их можно запомнить и использовать повторно, периодически обновляя. Это позволит делать больше запросов получения/изменения данных, не превышая лимит.
Работа со списками¶
Список системных и пользовательских фильтров для задач проектов, клиентов и сделок¶
URI: /BumsCommonApiV01/Filter/list.api|xml
Входные параметры¶
Поле |
Тип |
Допустимые значения |
Описание |
---|---|---|---|
SubjectType |
string |
task (задача), project (проект), contractor (клиент), deal (сделка) |
Тип объекта |
FilterType |
string |
all (все, по умолчанию), fixed (системные), user (пользовательские) |
Тип фильтра |
ProgramId |
int |
Id схемы сделки для SubjectType = deal |
Id схемы |
Выходные данные¶
Поле |
Тип |
Описание |
|
Id |
string |
Код фильтра |
|
Name |
string |
Фильтра метки |
|
Count |
int |
Количество задач или проектов, удовлетворяющих условию фильтра |
Пример ответа в JSON-формате¶
{
"status":
{
"code":"ok",
"message":null
},
"data":
{
"filters":
[
{
"Id":1001128,
"Name":"Персональный фильтр",
"Count":7
},
]
}
}
Пример ответа в XML-формате¶
<?xml version="1.0" encoding="utf-8"?>
<response>
<status>
<code>ok</code>
<message></message>
</status>
<data>
<filters>
<item>
<id>1001128</id>
<name>Персональный фильтр</name>
<time_created>2011-05-17 19:26:23</time_created>
<count>7</count>
</item>
</filters>
</data>
</response>
Загрузка файлов¶
Входные параметры¶
Поле |
Тип |
Описание |
---|---|---|
Content |
string |
Контент файла закодированный с использованием MIME base64 |
Name |
string |
Название файла |
Примеры загрузки файлов¶
Загрузка в кастомное поле модуля сделки¶
{
"Id" : 1,
"Model" : {
"Category1000048CustomFieldFile" : {
"Add" : [
{
"Content" : "{{BASE64_ENCODED_FILE_CONTENT}}",
"Name" : "someName.txt",
}
]
}
}
}
Создание комментария с файлом¶
{
"SubjectType" : "deal",
"SubjectId" : 1,
"Model" : {
"Text" : "some text",
"Attaches" : [
{
"Content" : "{{BASE64_ENCODED_FILE_CONTENT}}",
"Name" : "testImg.jpeg",
}
]
}
}
Фильтрация¶
Большинство списков фильтруется параметром FilterFields
. Доступны сравнения по less
, equal
, lessOrEqual
, greater
,
greaterOrEqual
. Например, запрос:
http://someaccount.megaplan.ru/BumsInvoiceApiV01/Invoice/list.api?FilterFields[Date][greaterOrEqual]=2011-07-01 16:11:00
, вернет счета, созданные после 16 часов, 11 минут, первого июля 2011 года.
Условия можно объединять с помощью блоков «and», «or», «not». Например, запрос /BumsCrmApiV01/Contractor/list.api?FilterFields[or][Email]=ivan@mail.ru&FilterFields[or][Skype]=ivan&FilterFields[not][Name]=Ivan вернет клиентов у которых основная почта «ivan@mail.ru» или skype «ivan» и имя не равно «Ivan»
Пейджинация¶
- Большинство списков объектов можно пейджинировать, используя параметры:
int Limit
- максимальное количество возвращаемых объектовint Offset
- количество объектов, которые нужно пропустить, прежде чем возвращать данные