REST.API — основная информация

АПИ Ветменеджер

ВАЖНО!

PostMan коллекция

OpenApi формат https://otis22.github.io/vetmanager-openapi/

Хост может меняться. Перед отправкой запросов в Ветменеджер нужно получить актуальный url-адрес клиники, отправив get запрос по адресу:

https://billing-api.vetmanager.ru/host/$domain - Rate Limit этого API 20 запросов в минуту с одного IP-адреса. Рекомендуем закешировать результат.

Для языков php и python есть библиотеки, используя которые можно получить адрес более удобно.

PHP

https://packagist.org/packages/otis22/vetmanager-url - Получение полного URL по Домену
https://packagist.org/packages/ioncurly/vetmanager-api-gateway - Api Gateway
https://packagist.org/packages/otis22/vetmanager-rest-api - Helper при создании запросов в API


Python
https://pypi.org/project/py-vetmanager-api/  - Получение полного URL по Домену

Простая JS функция для получения URL в браузере

https://gist.github.com/otis22/daf37af3807bd66e55ac5b8937aa99d2 

Активация

Как получить API-ключ

Для предоставления доступа к программе необходимо получить ключ доступа (API-ключ). Для этого зайдите в программу под пользователем с максимальными правами (роль Админы) перейдите в Настройки  -> Интеграция с сервисами -> Rest Api и нажмите ВКЛ и редактировать.

Будьте внимательны, ключ позволяет осуществлять полный CRUD

REST.API - основная информация

Заголовки

X-REST-API-KEY — обязательный параметр, ключ авторизации

X-REST-TIME-ZONE — необязательный параметр, значение временной зоны, если пусто, то используется временная зона сервера, формат (+/-)HH:MM. 

Обратите внимание, что формат X-REST-TIME-ZONE:(+/-)HH:MM устарел. Вместо него лучше использовать X-REST-TIME-ZONE:Region/City. Например, X-REST-TIME-ZONE:Europe/Minsk.  

Альтернативный способ авторизации для разработчиков сервисов, интегрирующихся с Ветменеджер.

Примеры

Основные Запросы

[GET] https://yoursite.com/rest/api/post/ (returns all posts) [GET] https://yoursite.com/rest/api/post/1 (returns post with PK=1) [POST] https://yoursite.com/rest/api/post/ (create new post) [PUT] https://yoursite.com/rest/api/post/1 (update post with PK=1) [DELETE] https://yoursite.com/rest/api/post/1 (delete post with PK=1)

Фильтрация данных

/api/post/?
limit=2
&offset=1
&sort=[{'property':'title','direction':'ASC'}]
&filter=[{'property':'title', 'value':'some value'},{'property':'comment', 'value':'You need a REST', 'operator':'='}]

Примечание: максимальное значение `limit` — 100. Если нужно получить больше записей, используйте пагинацию через `offset` (см. раздел «Пагинация и лимиты»).

Доступные операторы в фильтре:

  1. ‘=’, ‘!=’ | ‘<>’
  2. ‘<‘, ‘<=’, ‘>’, ‘>=’
  3. ‘in’, ‘not in’ ( в значение value необходимо передавать массив )
  4. ‘like’
limit=2&offset=1&filter = [
{"property": "id", "value" : 50, "operator": ">="}
, {"property": "user_id", "value" : [1, 5, 10, 14], "operator": "in"}
, {"property": "state", "value" : ["save", "deleted"], "operator": "not in"}
, {"property": "date", "value" : "2013-01-01", "operator": ">="}
, {"property": "date", "value" : "2013-01-31", "operator": "<="}
, {"property": "type", "value" : 2, "operator": "!="}
]

Пагинация и лимиты

При запросе списка записей (GET) действуют следующие ограничения:

ПараметрЗначение по умолчанию Описание
`limit`100Количество записей в ответе. Максимум — 100
`offset`0Сдвиг от начала выборки
  • Если параметр `limit` не указан, возвращается не более 100 записей
  • Максимально допустимое значение `limit` — 100
  • Для получения всех записей используйте пагинацию: последовательно увеличивайте `offset` на значение `limit`, пока `totalCount` в ответе не покажет, что все записи получены

Пример: постраничное получение всех записей

Первая страница (записи 1-100)

GET /rest/api/client/?limit=100&offset=0

...

Третья страница (записи 201-300)

GET /rest/api/client/?limit=100&offset=200

```

В ответе всегда присутствует поле `totalCount` — общее количество записей, соответствующих фильтру. Используйте его для определения количества страниц:

{
   "success": true,
   "message": "Records Retrieved Successfully",
   "data": {
      "totalCount": 1532,
      "client": [ ... ]
       }
   }
```

В данном примере 1532 записи, значит потребуется 16 запросов с `limit=100` (`offset`: 0, 100, 200, ..., 1500).

Примеры из командной строки

GET

#List
curl -i -H "Accept: application/json" -H "X-REST-API-KEY: some_key" https://test.vetmanager.ru/rest/api/sample/

#View

curl -l -H "Accept: application/json" -H "X-REST-API-KEY: some_key" https://test.vetmanager.ru/rest/api/sample/174

1. #CustomAction
2. curl -X GET 'https://example/rest/api/CONTROLLER/CustomAction/?a=1&b=1&...' -H "Accept: application/json" -H 'X-REST-API-KEY: ******'

PUT

#Update
curl -l -H "Accept: application/json" -H "X-REST-API-KEY: some_key" -H "X-HTTP-Method-Override: PUT" -X \
PUT -d '{"id":"174","name":"Five.1 Alive one ever Updated Again","desc":"It really is or should be at an honor","notes":"this is a note"}' \
https://test.vetmanager.ru/rest/api/sample/174

POST

Create
curl -l -H "Accept: application/json" -H "X-REST-API-KEY: some_key" -X \
POST -d '{"id":"175","name":"Six Alive one ever Updated Again","desc":"It really is or should be at an honor","notes":"this is a note"}' \
https://test.vetmanager.ru/rest/api/sample

curl -l -H "Accept: application/json" -H "X-REST-API-KEY: some_key" -X \
POST -d '[{"id":"175","name":"Six Alive one ever Updated Again","desc":"It really is or should be at an honor","notes":"this is a note"}, \
{"id":"176","name":"First.3 one ever Updated Again","desc":"It really is or should be at an honor","notes":"this is a note"}]' \
https://test.vetmanager.ru/rest/api/sample

DELETE

      curl -l -H "Accept: application/json" -H "X-REST-API-KEY: some_key" -H "X-HTTP-Method-Override: DELETE" -X DELETE https://test.vetmanager.ru/rest/api/sample/175


Откуда берется временная зона (TIME_ZONE)?

Временная зона устанавливается в настройках для каждой клиники (Настройки — Настройки клиник).

При редактировании/добавлении записей с датой и временем временная зона берется из настроек клиники и устанавливает время в соответствии с выбранной временной зоной.

Например:

В клинике установлена временная зона (+02:00) Europe/Kiev.

Создаем запись с датой (например, на приём) на 2019-03-05 в 14:40:00.

Дата записи 2019-03-05 14:40:00

Меняем временную зону в настройках клиники с (+02:00) Europe/Kiev на (+03:00) Europe/Moscow.

Смотрим раннее созданную нами запись и видим, что время поменялось на час вперед 2019-03-05 15:40:00.

 

Репозиторий с примерами

Powered by