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** ⚠️