TODO: request examples
Работа с API организована с помощью HTTP-запросов
Используемые методы: GET, POST, PATCH, DELETE
Content-Type: application/json и application/x-www-form-urlencoded
Для генерации документации к API используется Swagger.
Настоятельно рекомендую сверять API с ним, т.к. в нем оно всегда актуально.
- Для авторизации используется Firebase Authentication.
- Сперва необходимо зарегистрировать ваше приложение. Пишем zeroicq.
- Установка (Step 3+)
- настройка UI.
- От Firebase получаем JWT-токен. Его необходимо добавлять в header каждого запроса к API:
X-Firebase-Auth: <jwt_token>
Используют Google Cloud Messaging [GCM]. Для общего понимания можно почитать:
- https://javapapers.com/android/google-cloud-messaging-gcm-for-android-and-push-notifications
- https://code.tutsplus.com/ru/tutorials/how-to-get-started-with-push-notifications-on-android--cms-25870
API GCM на данный момент могло обновиться, поэтому так же стоит посетить:
Для лучшего понимания архитектуры и внесения обоснованных изменений рекомендуется ознакомиться со спецификацией iCalendar.
Для периодических событий используются RRULE и EXRULE правила стандарта iCalendar (RFC 2445 / RFC 5545).
Task - задача
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID задачи |
| name | string, optional | Название задачи |
| details | string, optional | Описание задачи |
| status | string, optional | Текущий статус задачи, enum |
| event_id | uint, optional | ID события, за которым закреплена задача |
| parent_id | uint, optional | ID родительской задачи |
| deadline_at | timestamp, required | Крайний срок выполнения задачи |
| created_at | timestamp, optional | Unix-время в мс создания задачи |
| updated_at | timestamp, optional | Unix-время в мс обновления задачи |
Event - событие
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID события |
| owner_id | string, required | ID создателя события, в данный момент это полученный от Firebase UID |
| name | string, optional | Название события |
| details | string, optional | Описание события |
| location | string, optional | Место события |
| status | string, optional | Статус события |
| started_at | timestamp, optional | Unix-время в мс начала события. Присутствует только при запросе события на временном промежутке |
| ended_at | timestamp, optional | Unix-время в мс конца события. Присутствует только при запросе события на временном промежутке |
| created_at | timestamp, optional | Unix-время в мс создания события |
| updated_at | timestamp, optional | Unix-время в мс обновления события |
EventPattern - описывает RRULE, RDATE, EXRULE и EXDATE правила для события
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID правила |
| event_id | uint, required | ID события |
| timezone | string, optional | Часовой пояс. Необходим для корректной обработки повторяющихся событий |
| rrule | string, optional | RRULE-строка, описывающая правило повторения события |
| exrules | ExRule[], optional | Не реализовано. Набор EXRULE-строк, описывающая исключения для повторяющихся событий |
| duration | timestamp, optional | Продолжительность события в мс. В будущем - если NULL, то равна времени, оставшемуся до конца дня |
| started_at | timestamp, optional | Unix-время в мс начала события / правила |
| ended_at | timestamp, optional | Unix-время в мс конца события / правила |
| created_at | timestamp, optional | Unix-время в мс создания правила |
| updated_at | timestamp, optional | Unix-время в мс обновления правила |
ExRule - описывает EXRULE правила для события
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID правила |
| rule | string, required | EXRULE-строк, описывающая исключения для повторяющихся событий |
| created_at | timestamp, optional | Unix-время в мс создания правила |
| updated_at | timestamp, optional | Unix-время в мс обновления правила |
EventInstance - событие, сгенерированное на основании rrule, exrrules, started_at и ended_at шаблона / паттерна
| Name | Type | Description |
|---|---|---|
| event_id | uint, required | ID события |
| pattern_id | uint, required | ID шаблона, по которому сгенерирован экземпляр |
| started_at | timestamp, required | Unix-время в мс начала события. Присутствует только при запросе события на временном промежутке |
| ended_at | timestamp, required | Unix-время в мс конца события. Присутствует только при запросе события на временном промежутке |
Permission - право на доступ к сущностям другого пользователя
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID |
| entity_id | string, required | ID сущности. Или пользователя, если необходимо выдать разрешение на все сущности указанного типа |
| user_id | string, required | ID пользователя, который получил разрешение |
| owner_id | string, required | ID владельца сущности |
| name | string, required | Название разрешения. Например, READ_EVENT |
| created_at | timestamp, optional | Unix-время в мс создания разрешения |
| updated_at | timestamp, optional | Unix-время в мс обновления разрешения |
Tag - теги событий (не реализовано)
| Name | Type | Description |
|---|---|---|
| id | uint, required | Уникальный ID тега |
| name | string, required | Название тега |
| slug | string, required | Уникальное ключевое слово тега, латиница |
| created_at | timestamp, optional | Unix-время в мс создания тега |
| updated_at | timestamp, optional | Unix-время в мс обновления тега |
EventToTag - m2m связь событий и тегов
EventToUser - m2m связь событий и их участников
TaskToUser - m2m связь для ответственных за задачу
TagToUser - m2m связь тегов и пользователей, подписка на теги
Все сущности регулируются следующими правами доступа: READ, UPDATE, DELETE.
Типы доступных сущностей: EVENT, PATTERN, TASK.
У владельца сущности всегда есть все права. Для выдачи прав предусмотрены методы:
/api/v1/grant/api/v1/share/api/v1/share/{token}
grant позволяет немедленно выдать разрешение, если вам известен uid пользователя.
share отдает ссылку, по которой должен перейти авторизованный пользователь, чтобы получить переданные вами права.
Вы должны самостоятельно определить, как запрос к ссылке будет организован в вашем приложении.
Например, вы можете сообщить пользователю уникальный токен данной ссылки
и позволить другому пользователю просто ввести его.
GET /api/v1/events/instances
Возвращает коллекцию экземпляров событий, сгенерированных на основании определенных для них паттернов. На один паттерн генерируется не более 1000 экземпляров.
Параметры
| Field | Type | Description |
|---|---|---|
| id | uint[], optional | Массив из ID событий, которые необходимо рассмотреть |
| owner_id | string, optional | ID владельца события. Для доступа необходимо право на чтение (READ) |
| from | timestamp, optional | Unix-время в мс после которого события закончатся (включительно) |
| to | timestamp, optional | Unix-время в мс до которого события могут начаться (включительно) |
| created_from | timestamp, optional | Unix-время в мс после которого события были созданы (включительно) |
| created_to | timestamp, optional | Unix-время в мс до которого события были созданы (включительно) |
| updated_from | timestamp, optional | Unix-время в мс после которого события были обновлены (включительно) |
| updated_to | timestamp, optional | Unix-время в мс до которого события были обновлены (включительно) |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"event_id": "...",
"pattern_id": "...",
"started_at": "...",
"ended_at": "..."
},
...
],
"count": 2,
"offset": 0
}GET /api/v1/events
Возвращает коллекцию доступных пользователю событий. Поддерживает пагинацию.
Параметры
| Field | Type | Description |
|---|---|---|
| id | uint[], optional | Массив из ID событий, которые необходимо рассмотреть |
| tags | string[], optional | WIP. Теги, которым события принадлежат (дискас - пересечение или объединение) |
| participants | uint[], optional | WIP. ID участников события |
| owner_id | string, optional | ID владельца события. Для доступа необходимо право на чтение (READ) |
| count | uint, optional | Количество событий, которое необходимо вернуть. По умолчанию: 100 |
| offset | uint, optinal | Количество событий, которое необходимо пропустить. По умолчанию: 0 |
| from | timestamp, optional | Unix-время в мс после которого события закончатся (включительно) |
| to | timestamp, optional | Unix-время в мс до которого события могут начаться (включительно) |
| created_from | timestamp, optional | Unix-время в мс после которого события были созданы (включительно) |
| created_to | timestamp, optional | Unix-время в мс до которого события были созданы (включительно) |
| updated_from | timestamp, optional | Unix-время в мс после которого события были обновлены (включительно) |
| updated_to | timestamp, optional | Unix-время в мс до которого события были обновлены (включительно) |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": "...",
"owner_id": "...",
"name": "...",
"details": "...",
"status": "...",
"location": "...",
"started_at": "...",
"ended_at": "...",
"created_at": "...",
"updated_at": "..."
},
...
],
"count": 2,
"offset": 0
}POST /api/v1/events
Создание нового события.
Параметры
| Field | Type | Description |
|---|---|---|
| name | string, optional | Название события |
| details | string, optional | Описание события |
| location | string, optional | Место события |
| status | string, optional | Статус события |
| tags | Tag[], optional | WIP. Теги события. В случае, если тег отсутствует - он будет создан |
| participants | uint[], optional | WIP. ID участников события |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": 1,
...
}
],
"count": 1
}PATCH /api/v1/events/{id}
Частичное обновление события.
idсобытия передается в URL запроса.
Параметры
| Field | Type | Description |
|---|---|---|
| name | string, optional | Название события |
| details | string, optional | Описание события |
| location | string, optional | Место события |
| status | string, optional | Статус события |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": 1,
...
}
],
"count": 1
}DELETE /api/v1/events/{id}
Удаление события.
idсобытия передается в URL запроса.
HTTP 200
{
"success": true,
"status": 200,
"message": "ok"
}GET /api/v1/patterns
Возвращает коллекцию доступных паттернов. Поддерживает пагинацию.
Параметры
| Field | Type | Description |
|---|---|---|
| id | uint[], optional | Массив из ID паттернов, которые необходимо вернуть |
| events | uint[], optional | Массив из ID событий, для которых необходимо вернуть паттерны |
| count | uint, optional | Количество паттернов, которое необходимо вернуть. По умолчанию: 100 |
| offset | uint, optinal | Количество паттернов, которое необходимо пропустить. По умолчанию: 0 |
| from | timestamp, optional | Unix-время в мс после которого паттерны закончатся (включительно) |
| to | timestamp, optional | Unix-время в мс до которого паттерны могут начаться (включительно) |
| created_from | timestamp, optional | Unix-время в мс после которого паттерны были созданы (включительно) |
| created_to | timestamp, optional | Unix-время в мс до которого паттерны были созданы (включительно) |
| updated_from | timestamp, optional | Unix-время в мс после которого паттерны были обновлены (включительно) |
| updated_to | timestamp, optional | Unix-время в мс до которого паттерны были обновлены (включительно) |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": "...",
"rrule": "...",
"exrules": [ ... ],
"timezone": "...",
"duration": "...",
"started_at": "...",
"ended_at": "...",
"created_at": "...",
"updated_at": "..."
},
...
],
"count": 2,
"offset": 0
}POST /api/v1/patterns
Создание нового паттерна.
Параметры
| Field | Type | Description |
|---|---|---|
| event_id | uint, required | GET-параметр. ID события для которого создается паттерн |
| timezone | string, optional | Часовой пояс. Необходим для корректной обработки повторяющихся событий |
| rrule | string, optional | RRULE-строка, описывающая правило повторения события |
| exrules | ExRule[], optional | Не реализовано. EXRULE объекты, описывающие исключения для повторяющихся событий |
| duration | uint, optional | Продолжительность события в мс |
| started_at | timestamp, optional | Unix-время в мс начала события / правила |
| ended_at | timestamp, optional | Unix-время в мс конца события / правила |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": "...",
"rrule": "...",
"exrules": [ ... ],
"duration": "...",
"started_at": "...",
"ended_at": "...",
"created_at": "...",
"updated_at": "..."
}
],
"count": 1
}PATCH /api/v1/patterns/{id}
Частичное обновление паттерна.
idпаттерна передается в URL запроса.
Параметры
| Field | Type | Description |
|---|---|---|
| rrule | string, optional | RRULE-строка, описывающая правило повторения события |
| exrules | ExRule[], optional | Не реализовано. EXRULE объекты, описывающие исключения для повторяющихся событий |
| duration | uint, optional | Продолжительность события в мс |
| started_at | timestamp, optional | Unix-время в мс начала события / правила |
| ended_at | timestamp, optional | Unix-время в мс конца события / правила |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": 1,
...
}
],
"count": 1
}DELETE /api/v1/patterns/{id}
Удаление паттерна.
idпаттерна передается в URL запроса.
HTTP 200
{
"success": true,
"status": 200,
"message": "ok"
}GET /api/v1/tasks
Получение коллекции задач. Поддерживается пагинация.
Параметры
| Field | Type | Description |
|---|---|---|
| id | uint[], optional | Массив из ID задач, которые необходимо вернуть |
| status | string, optional | Вернуть задачи только с указанным статусом |
| event_id | uint, optional | ID события, для которого создана задача |
| parent_id | uint, optional | ID задачи-родителя. Будут возвращены только дети указанной задачи |
| count | uint, optional | Количество задач, которое необходимо вернуть. По умолчанию: 100 |
| offset | uint, optinal | Количество задач, которое необходимо пропустить. По умолчанию: 0 |
| deadline | timestamp, optional | Unix-время в мс до которого задача должна быть выполнена (включительно) |
| created_from | timestamp, optional | Unix-время в мс после которого паттерны были созданы (включительно) |
| created_to | timestamp, optional | Unix-время в мс до которого паттерны были созданы (включительно) |
| updated_from | timestamp, optional | Unix-время в мс после которого паттерны были обновлены (включительно) |
| updated_to | timestamp, optional | Unix-время в мс до которого паттерны были обновлены (включительно) |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": "...",
"event_id": "...",
"parent_id": "...",
"name": "...",
"details": "...",
"status": "...",
"deadline_at": "...",
"created_at": "...",
"updated_at": "..."
},
...
],
"count": 2
}POST /api/v1/tasks
Создание новой задачи.
Параметры
| Field | Type | Description |
|---|---|---|
| event_id | uint, required | GET-параметр. ID события для которого создается задача |
| parent_id | uint, optional | ID задачи-родителя |
| name | string, optional | Название задачи |
| details | string, optional | Описание задачи |
| status | string, optional | Статус задачи. Согласно iCal: IN-PROCESS, CANCELLED, COMPLETED, NEEDS-ACTION |
| deadline_at | timestamp, optional | Unix-время в мс до которого задача должна быть выполнена |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": 1,
...
}
],
"count": 1
}PATCH /api/v1/tasks/{id}
Частичное обновление задачи.
idзадачи передается в URL запроса.
Параметры
| Field | Type | Description |
|---|---|---|
| rrule | string, optional | RRULE-строка, описывающая правило повторения события |
| exrules | ExRule[], optional | Не реализовано. EXRULE объекты, описывающие исключения для повторяющихся событий |
| duration | uint, optional | Продолжительность события в мс |
| started_at | timestamp, optional | Unix-время в мс начала события / правила |
| ended_at | timestamp, optional | Unix-время в мс конца события / правила |
HTTP 200
{
"success": true,
"status": 200,
"data": [
{
"id": 1,
...
}
],
"count": 1
}DELETE /api/v1/tasks/{id}
Удаление задачи.
idзадачи передается в URL запроса.
HTTP 200
{
"success": true,
"status": 200,
"message": "ok"
}GET /api/v1/user
Возвращает пользователя по id, номеру телефона или почтовому адресу.
Параметры
| Field | Type | Description |
|---|---|---|
| user_id | string, optional | Поиск пользователя по ID |
| phone | string, optional | Поиск пользователя по номеру телефона |
| string, optional | Поиск пользователя по почтовому адресу |
HTTP 200
{
"success": true,
"status": 200,
"count": 1,
"offset": 0,
"data": [
{
"id": "9d46T2czeKB9FC65Jyc2",
"username": "ExampleUser",
"photo": null,
"enabled": true,
"credentials_non_expired": true,
"account_non_locked": true,
"account_non_expired": true
}
]
}Без описания, смотреть в Swagger.
GET /api/v1/import - импорт календаря из iCal файла, ical.ics
POST /api/v1/export - экспорт календаря в iCal файл, ical.ics
GET /api/v1/permissions - получить выданные права другим пользователям
DELETE /api/v1/permissions/{id} - удалить выбранное разрешение
GET /api/v1/grant - выдать права пользователю при известном uid
GET /api/v1/share - выдать права пользователю при неизвестном uid. Возвращает ссылку и токен
POST /api/v1/share - тоже самое, что и GET-запрос, но можно передать сразу несколько прав в массив
GET /api/v1/share/{token} - активировать токен и получить права
GET /api/v1/events/check
...
Параметры
| Field | Type | Description |
|---|---|---|
| ... | string, required | ... |
HTTP 200
{
"...": "..."
}GET /api/v1/user/freetime
Возвращает непересекающиеся отрезки времени в определенном диапозоне, когда пользователь свободен.
Параметры
| Field | Type | Description |
|---|---|---|
| user_id | uint, required | ID пользователя |
| from | timestamp, required | Начало проверяемого промежутка |
| to | timestamp, required | Конец проверяемого промежутка |
HTTP 200
{
"result":
[
{
"from": 1551852784,
"to": 1551862784
},
...
],
"count": 10,
"cached": "true"
}GET /api/v1/tags
...
Параметры
| Field | Type | Description |
|---|---|---|
| ... | string, required | ... |
HTTP 200
{
"...": "..."
}GET /api/v1/tags/subscribe
Подписка пользователя на переданные теги
Параметры
| Field | Type | Description |
|---|---|---|
| ... | string, required | ... |
HTTP 200
{
"...": "..."
}GET /api/v1/tags/unsubscribe
Отписка пользователя от переданных тегов
Параметры
| Field | Type | Description |
|---|---|---|
| ... | string, required | ... |
HTTP 200
{
"...": "..."
}