Rest API Список кассовых терминалов для каждого из магазинов - datawizio/pythonAPI GitHub Wiki

3. Ресурс /terminals/ (Список кассовых терминалов для каждого из магазинов, Коллекция)

Список кассовых терминалов - это список терминалов обслуживания покупателей (кассовые терминалов) применительно к каждому магазину торговой сети. С помощью ресурса /terminals/ можно получить доступ к списку кассовых терминалов, а также добавлять в справочник новые терминалы.

3.1. Структура объекта:

Название поля Тип поля размер Обязательное Только чтение Примечание
url URL нет да url этого объекта
terminal_id строка 50 да нет должен быть уникальным и соответствовать id кассового терминала с клиентской бухгалтерской программы
shop_id строка 50 да нет код магазина из справочника /shops/ (см.п.1)
name строка 100 да нет наименование (либо код) кассового терминала, принятый для его обозначение в конкретном магазине
shop_url URL нет да URL магазина

3.2. Доступные команды

С ресурсом /terminals/ поддерживаются следующие команды:

  • GET - получить одну страницу коллекции
  • POST - добавить новый терминал либо список терминалов в Список кассовых терминалов
  • OPTIONS - мета-информация по структуре объекта
  • HEAD - аналог GET, но возвращается только заголовок ответа

3.2.1. GET /terminals/ - получить одну страницу коллекции.

Вид команды: GET http://api.datawiz.io/api/v1/terminals/

Суффиксы:
  • .json - Получить ответ с сервера в формате JSON
  • .api - Получить ответ с сервера в формате HTML (тестовая площадка)
Параметры:
  • format=json|api - аналог вышеуказанных суффиксов
  • page_size={nn} - установить размер страницы равный {nn} объектов
  • page={n} - скачать страницу {n}
  • shop_id={n} - отображать только терминалы, принадлежащие магазину с id={n}
  • search = {substring} - отображать только объекты, в поле name которых найдено фрагмент "{substring}"
  • ordering=name|identifier - сортировать по полю в алфавитном порядке (от меньшего - к большему)
  • ordering=-name|-identifier - сортировать по полю в обратном порядке

ЗАМЕЧАНИЕ: identifier - означает сортировать по полю terminal_id

Ответ с сервера:

Объект "коллекция" из четырех полей (count,next, previous,results).

Пример пустой коллекции, полученной в результате запроса:

GET http://api.datawiz.io/api/v1/terminals/.json/?search=unknown-shop_id

{
     "count": 0, 
     "next": null, 
     "previous": null, 
     "results": [] 
}

Пример коллекции из 2-х элементов: GET http://api.datawiz.io/api/v1/terminals/?format=json&page_size=2:

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS

{ "count": 39, "next": "http://api.datawiz.io/api/v1/terminals/?page=2&page_size=2&format=api", "previous": null, "results": [ { "url": "http://api.datawiz.io/api/v1/terminals/1-1/", "terminal_id": "1-1", "name": "Kassa 1", "shop_id": "1", "shop_url": "http://api.datawiz.io/api/v1/shops/1" }, { "url": "http://api.datawiz.io/api/v1/terminals/2-1/", "terminal_id": "2-1", "name": "Kassa 1", "shop_id": "2", "shop_url": "http://api.datawiz.io/api/v1/shops/2" } ] }

Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанною в ключе detail:

HTTP 404 NOT FOUND 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH 

{ "detail": "Not found" }

3.2.2. POST /terminals/ - добавить один объект в Список кассовых терминалов

Вид команды: POST http://api.datawiz.io/api/v1/terminals/?format=json

Суффиксы:
  • .json - Взаимодействовать с сервером в формате JSON
  • .api - Взаимодействовать с сервером в формате HTML (тестовая площадка)
Параметры:
  • `format=json - взаимодействовать с сервером в формате JSON
  • `format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Данные запроса:

В запросе передается JSON-объект типа словарь (dictionary), который описывает новый товар. Важны все три поля: terminal_id, shop_id и name. Порядок следования полей не принципиален.

Пример запроса на добавление одного нового объекта в Список кассовых терминалов: POST http://api.datawiz.io/api/v1/terminals/.json

{
     "terminal_id": "1-4",
     "shop_id": "1",
     "name": "New terminal"
}
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 201 и статус создания обьекта.

Пример ответа сервера:

HTTP 201 CREATED 
Content-Type: application/json 
Vary: Accept 
Location: http://api.datawiz.io/api/v1/terminals/1-4/
Allow: GET, POST, HEAD, OPTIONS 

{ "updated": 0, "inserted": 1 }

Условия и ограничение (Constraints):
  • Если объект с идентификатором terminal_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Нельзя добавить на сервер объект, если не существует магазина с указанным идентификатором shop_id
  • Поле name не может быть пустым.
  • Поле name должно быть уникальным в пределах одного магазина
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанными напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.

Пример ответа сервера при возникновении ошибки (поле name передано пустым):

HTTP 400 BAD REQUEST 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 
{
     "name": [
         "This field is required." 
     ] 
}

3.2.3. POST /terminals/ - пакетное (bulk) добавление объектов в Список кассовых терминалов

Вид команды: POST http://api.datawiz.io/api/v1/terminals/?format=json

Суффиксы:
  • .json - Взаимодействовать с сервером в формате JSON
  • .api - Взаимодействовать с сервером в формате HTML (тестовая площадка)
Параметры:
  • `format=json - взаимодействовать с сервером в формате JSON
  • `format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Данные запроса:

В запросе передается JSON-объект типа список (list), который содержит один или более объект, описывающий новый терминал. Передача на сервер объектов не по одиночке, а списком позволяет значительно увеличить скорость передачи объектов.

Пример запроса на пакетное добавление трёх новых объектов в Список кассовых терминалов: POST http://api.datawiz.io/api/v1/terminals/.json

[
   {
     "terminal_id": "1-4",
     "shop_id": "1",
     "name": "Terminal 4",
   },
   {
     "terminal_id": "2-1",
     "shop_id": "2",
     "name": "Kassa 1", 
   },
   {
     "terminal_id": "2-2",
     "shop_id": "2",
     "name": "Kassa 2",
   }
]
Ответ сервера:

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

Пример ответа сервера:

HTTP 201 CREATED
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS

{ "updated": 0, "inserted": 3 }

Условия и ограничение (Constraints):
  • Если объект с идентификатором terminal_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Нельзя добавить на сервер объект, если не существует магазина с указанным идентификатором shop_id
  • Поле name не может быть пустым
  • Поле name должно быть уникальным в пределах одного магазина
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанными в позиции объекта, в котором произошла ошибка, напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.

Пример ответа сервера при возникновении ошибки (поле shop_id второго объекта передано неверным):

HTTP 400 BAD REQUEST
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS

[ {}, { "shop_id": [ "Shop with id=33 does not exist" ] }, {} ]

Как видно, ошибка произошла во втором объекте, в поле shop_id. Тут же указана и причина ошибки.

3.2.4. OPTIONS /terminals/ - мета-информация по структуре объекта

При выполнении данной команды возвращается такая JSON-структура:

OPTIONS /api/v1/terminals/

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS

{ "name": "Terminal List", "description": "Terminals", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ], "actions": { "POST": { "url": { "type": "field", "required": false, "read_only": true }, "terminal_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 }, "shop_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "shop_url": { "type": "field", "required": false, "read_only": true } } } }

4. Ресурс terminals/{id} - определенный объект из Списка кассовых терминалов

Воспользовавшись ресурсом /terminals/{id} можно получить с сервера, модифицировать полностью и частично, а также удалить выбранный объект из Списка кассовых терминалов. Для выбора нужного объекта необходимо заменить {id} в URL ресурса на идентификатор из поля terminal_id существующего объекта. Перечень существующих объектов и их идентификаторов можно получить воспользовавшись командой 'GET /terminals/' (подробнее см.раздел "[3. Ресурс /terminals/ (Список кассовых терминалов для каждого из магазинов, Коллекция)]")

4.1. Структура объекта:

Название поля Тип поля размер Обязательное Только чтение Примечание
url URL нет да url этого объекта
terminal_id строка 50 да нет должен быть уникальным и соответствоватьid кассового терминала с клиентской бухгалтерской программы
shop_id строка 50 да нет код магазина из справочника /shops/ (см.п.1)
name строка 100 да нет наименование (либо код) кассового терминала, принятый для его обозначение в конкретном магазине
shop_url URL 100 нет да URL магазина

4.2. Доступные команды:

С ресурсом /terminals/{id} поддерживаются следующие команды:

  • GET - получить объект с terminal_id={id}
  • PUT - полностью заменить объект на сервере новым
  • PATCH - изменить значение отдельных полей объекта
  • DELETE - изъять из Списка кассовых терминалов объект с terminal_id={id}
  • OPTIONS - мета-информация по структуре объекта
  • HEAD - аналог GET, но возвращается только заголовок ответа

4.2.1. GET - получить объект с terminal_id={id}

Вид команды: GET http://api.datawiz.io/api/v1/terminals/CAT11 - получить объект с terminal_id="CAT11"

Суффиксы:
  • .json - Получить ответ с сервра в формате JSON
  • .api - Получить ответ с сервра в формате HTML (тестовая площадка)
Параметры:
  • format=json|api - установить формат данных. Аналог вышеуказанных суффиксов
Ответ с сервера:

При отправке на сервер команды GET /terminals/{id} с пустым телом запроса сервер возвращает объект заданной структуры в формате JSON или сообщение об ошибке.

Например, GET http://api.datawiz.io/api/v1/terminals/1-1/.json:

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH

{ "url": "http://api.datawiz.io/api/v1/terminals/1-1/", "terminal_id": "1-1", "name": "Kassa 1", "shop_id": "1", "shop_url": "http://api.datawiz.io/api/v1/shops/1" }

Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail:

HTTP 404 NOT FOUND 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH 

{ "detail": "Not found" }

4.2.2. PUT /terminals/{id}/ - полностью заменить объект на сервере новым

Фактически данный запрос работает, как два последовательных запроса: 1 Удалить объект со старым terminal_id = {id} (DELETE) 2 Создать новый объект с новым terminal_id (POST)

Вид команды: PUT http://api.datawiz.io/api/v1/terminals/1-1/.json - заменить объект с terminal_id="1-1" на другой

Суффиксы:
  • .json - Взаимодействовать с сервером в формате JSON
  • .api - Взаимодействовать с сервером в формате HTML (тестовая площадка)
Параметры:
  • format=json - взаимодействовать с сервером в формате JSON
  • format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Данные запроса:

В запросе передается JSON-объект с новым значением объекта

Важны все три поля: terminal_id, shop_id и name.

Пример запроса на замену объекта в Списке кассовых терминалов:

PUT http://api.datawiz.io/api/v1/terminals/1-1/.json

{
     "terminal_id": "1-100", 
     "name": "Another Name",
     "shop_id": "1"
}

Здесь замене подлежат поля terminal_id и name. Нужно заметить, что при замене значения ключевого поля (identifier, в данном случае - terminal_id), данное поле изменяется везде, и все связи сохраняются.

Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url.

ПРИМЕЧАНИЕ. Если менялось поле terminal_id, то и поле url также изменится!

Пример ответа сервера:

HTTP 200 OK 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH 

{ "url": "http://api.datawiz.io/api/v1/terminals/1-100/", "terminal_id": "1-100", "name": "Another Name", "shop_id": "1", "shop_url": "http://api.datawiz.io/api/v1/shops/1" }

Ограничение (Constraints):
  • При замене нельзя указать другой terminal_id, если уже существует объект с таким же terminal_id
  • Поле shop_id должно содержать корректное значение из справочника Список магазинов (см.п.1)
  • Поле name не может быть пустым
  • Поле name должно быть уникальным в пределах одного магазина
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанным напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.

Пример ответа сервера при возникновении ошибки (поле name передано пустым):

HTTP 400 BAD REQUEST 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 
{
     "name": [
         "This field is required." 
     ] 
}

4.2.3. PATCH /terminals/{id}/ - изменить значение отдельных полей объекта

Команда PATCH используется, если нужно изменить отдельные поля объекта. Команда PATCH во всем похожа на команду PUT, только в ней можно указывать не весь объект, а только те поля, которые необходимо изменить.

Вид команды: PATCH http://api.datawiz.io/api/v1/terminals/1-100/.json - заменить отдельные поля объекта с terminal_id=1-100 на другие

Суффиксы:
  • .json - Взаимодействовать с сервером в формате JSON
  • .api - Взаимодействовать с сервером в формате HTML (тестовая площадка)
Параметры:
  • format=json - взаимодействовать с сервером в формате JSON
  • format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Данные запроса:

В запросе передается JSON-объект с новым значением отдельных полей объекта

Важны все три поля: terminal_id, shop_id и name.

Пример запроса на замену значения поля name для объекта с terminal_id=1-100 в Списке кассовых терминалов:

PATCH http://api.datawiz.io/api/v1/terminals/1-100/.json

{
     "name": "Terminal #100" 
}
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url.

ПРИМЕЧАНИЕ! Если менялось поле terminal_id, то и поле url также изменится!

Пример ответа сервера:

HTTP 200 OK 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 

{ "url": "http://api.datawiz.io/api/v1/terminals/1-100/", "terminal_id": "1-100", "name": "Terminal #100", "shop_id": "1", "shop_url": "http://api.datawiz.io/api/v1/shops/1" }

Ограничение (Constraints):
  • При замене нельзя указывать другой terminal_id, если уже существует объект с таким же terminal_id.
  • Поле shop_id должно содержать корректное значение из справочника Список магазинов (см.п.1)
  • Поле name не может быть пустым
  • Поле name должно быть уникальным в пределах одного магазина
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанным напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.

Пример ответа сервера при возникновении ошибки (поле name передано пустым):

HTTP 400 BAD REQUEST 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 
{
     "name": [
         "This field is required." 
     ] 
}

4.2.4. DELETE /terminals/{id}/ - изъять из Списка кассовых терминалов

Команда DELETE используется для извлечения указанного объекта из Списка кассовых терминалов

Вид команды: DELETE http://api.datawiz.io/api/v1/terminals/1-100/ - изъять обьект с terminal_id=1-100

Суффиксы:
  • .json - взаимодействовать с сервером в формате JSON
  • .api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Параметры:
  • format=json - взаимодействовать с сервером в формате JSON
  • format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
Данные запроса:

В запросе ничего передавать не нужно.

Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 204 NO CONTENT.

Пример ответа сервера:

HTTP 204 NO CONTENT 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH
Ограничение (Constraints):
  • Нельзя удалить терминал, который используется в чеках
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail:

HTTP 404 NOT FOUND 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH 

{ "detail": "Not found" }

4.2.5.OPTIONS /terminals/{id}/ - мета-информация по структуре объекта

При выполнении данной команды возвращается такая JSON-структура:

OPTIONS /api/v1/terminals/1-100/

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH

{ "name": "Terminal Instance", "description": "my Terminal doc", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ], "actions": { "PUT": { "url": { "type": "field", "required": false, "read_only": true }, "terminal_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 }, "shop_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "shop_url": { "type": "field", "required": false, "read_only": true } } } }

⚠️ **GitHub.com Fallback** ⚠️