Rest API Довідник одиниць виміру товарів - datawizio/pythonAPI GitHub Wiki

7. Ресурс /units/ (Довідник одиниць виміру товарів, Колекція)

Довідник одиниць виміру - це список одиниць виміру товарів (шт., кг., уп., і т.д.). З допомогою ресурсу /units/ можна отримати доступ до списку одиниць виміру товарів, а також додавати в довідник нові од.виміру.

7.1. Структура об'єкта:

Назва поля Тип поля розмір Обов'язково Тільки читання Примітка
url URL ні так url цього об'єкта
unit_id рядок 50 так ні повинен бути унікальним та відповідати id одиниць виміру з клієнтської бухгалтерської програми
name рядок 100 так ні найменування одиниці виміру

7.2. Доступні команди

З ресурсом /units/ підтримуються наступні команди:

  • GET - отримати одну сторінку колекції
  • POST - добавити одиницю виміру чи список одиниць виміру в Довідник одиниць виміру
  • OPTIONS - мета-інформація по структурі об'єкта
  • HEAD - аналог GET, але повертається тільки заголовок відповіді

7.2.1. GET /units/ - отримати одну сторінку колекції.

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

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

ПРИМІТКА: identifier - означає сортування по полю unit_id

Відповідь з сервера:

Об'єкт "колекція" із чотирьох полів (count,next, previous,results).

Приклад порожньої колекції, отриманої в результаті запиту:

GET http://api.datawiz.io/api/v1/units/.json/?search=unknown-string

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

Приклад колекції із 2-х елементів: GET http://api.datawiz.io/api/v1/units/?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/units/?page=2&page_size=2&format=api", "previous": null, "results": [ { "url": "http://api.datawiz.io/api/v1/units/1-1/", "unit_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/units/2-1/", "unit_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" }

7.2.2. POST /units/ - добавити один об'єкт в Довідник одиниць виміру

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

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

В запиті передається JSON-об'єкт типу словник (dictionary), який описує новий товар. Важливі всі поля: unit_id, name. Порядок послідовності полів не принциповий.

Приклад запиту на додавання одного нового об'єкту в Довідник одиниць виміру: POST http://api.datawiz.io/api/v1/units/.json

{
    "unit_id": "2", 
    "name": "кг" 
}
Відповідь сервера:

При коректній обробці запиту сервер повертає код статусу 201 і статус створення об'єкта.

Приклад відповіді сервера:

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

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

Умови і обмеження (Constraints):
  • Якщо об'єкт з ідентифікаторомunit_id вже існує на сервері, то вказаний запит замінить об'єкт на сервері (replace) без попередження.
  • Поле 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." 
     ] 
}

7.2.3. POST /units/ - пакетне (bulk) додавання об'єктів у Довідник одиниць виміру

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

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

В запиті передається JSON-об'єкт типу список (list), який містить один чи більше об'єктів, які описують нову одиницю виміру. Передача на сервер об'єктів не по одинці, а списком дозволяє значно збільшити швидкість передачі об'єктів.

Приклад запиту на пакетне додавання трьох нових об'єктів у Довідник одиниць виміру: POST http://api.datawiz.io/api/v1/units/.json

[
    {
        "unit_id": "2", 
        "name": "кг" 
    }, 
    {
        "unit_id": "4", 
        "name": "уп 10шт"
    },
    {
        "unit_id": "4", 
        "name": "шт"
    }
]
Відповідь сервера:

При коректній обробці запиту сервер повертає код статусу 201 і статистику по доданих/змінених об'єктах.

Приклад відповіді сервера:

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

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

Умови і обмеження (Constraints):
  • Якщо об'єкт з ідентифікатором unit_id вже існує на сервері, то вказаний запит замінить об'єкт на сервері (replace) без попередження.
  • Поле name не може бути порожнім.
  • Поле name повинно бути унікальним (на сервері не має вже існувати об'єкта, з таким самим іменем).
Повідомлення про помилку:

У випадку виникнення помилки сервер повертає відповідь із відповідним статусом, а також повідомленням про помилку, записаними навпроти імені поля, з яким ця помилка пов'язана. Якщо помилка стосується не окремого поля, а всього об'єкта, то повідомлення про помилку буде записано навпроти ключа non_field_errors.

ПРИМІТКА. Кожне повідомлення про помилку являє собою колекцію (масив) рядків символів.

Приклад відповіді сервера при виникненні помилки (поле name другого об'єкта не унікальне):

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

[ {}, { "name": [ "The name 'уп 10шт' is already used for object with unit_id=4" ] }, {} ]

Як бачимо, помилка відбулась у другому об'єкті, в полі name. Тут же вказана і причина помилки.

7.2.4. OPTIONS /units/ - мета-інформація по структурі об'єкта

При виконанні даної команди повертається така JSON-структура:

OPTIONS /api/v1/units/

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

{ "name": "Unit List", "description": "Units", "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 }, "unit_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 } } } }

8. Ресурс units/{id} - визначений об'єкт із Довідника одиниць виміру

Скориставшись ресурсом /units/{id} можна отримати із сервера, модифікувати повністю і частково, а також видалити вибраний об'єкт із Довідника одиниць виміру. Для вибору потрібного об'єкта необхідно замінити {id} в URL ресурсу на ідентифікатор із поля unit_id існуючого об'єкта. Перелік існуючих об'єктів і їх ідентифікаторів можна отримати скориставшись командою 'GET /units/' (детальніше див.розділ "[7. Ресурс /units/ (Довідник одиниць виміру, Колекція)]")

8.1. Структура об'єкта:

Назва поля Тип поля розмір Обов'язково Тільки читання Примітка
url URL ні так url цього об'єкта
unit_id рядок 50 так ні повинен бути унікальними і відповідати id одиниці виміру з клієнтської бухгалтерської програми
name рядок 100 так ні найменування одиниці виміру

8.2. Доступні команди:

З ресурсом /units/{id} підтримуються наступні команди:

  • GET - отримати об'єкт з unit_id={id}
  • PUT - повністю замінити об'єкт на сервері новим
  • PATCH - змінити значення окремих полів об'єкта
  • DELETE - вилучити із Довідника одиниць виміру об'єкт з unit_id={id}
  • OPTIONS - мета-інформація по структурі об'єкта
  • HEAD - аналог GET, але повертається тільки заголовок відповіді

8.2.1. GET - отримати об'єкт з unit_id={id}

Вид команди: GET http://api.datawiz.io/api/v1/units/4 - отримати об'єкт з unit_id=4

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

При відправленні на сервер команди GET /units/{id} з порожнім тілом запиту сервер повертає об'єкт заданої структури в форматі JSON чи повідомлення про помилку.

Наприклад, GET http://api.datawiz.io/api/v1/units/4/.json:

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

{ "url": "http://api.datawiz.io/api/v1/units/4/", "unit_id": "4", "name": "шт" }

Повідомлення про помилку:

У випадку виникнення помилки сервер повертає відповідь з відповідним статусом, а також повідомленням про помилку, записану в ключі detail:

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

{ "detail": "Not found" }

8.2.2. PUT /units/{id}/ - повністю замінити об'єкт на сервері новим

Фактично даний запит працює, як два послідовних запити: 1 Видалити об'єкт із старим unit_id = {id} (DELETE) 2 Створити новий об'єкт із новим unit_id (POST)

Вид команди: PUT http://api.datawiz.io/api/v1/units/4/.json - замінити об'єкт з unit_id="4" на інший

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

В запиті передається JSON-об'єкт з новим значенням об'єкта

Важливі всі поля: unit_id, name.

Приклад запиту на заміну об'єкта в Довіднику одиниць виміру:

PUT http://api.datawiz.io/api/v1/units/4/.json

{
    "unit_id": "44", 
    "name": "Шт."
}
}

Тут під заміну попадають поля unit_id і name. Зазначимо, що при заміні значення ключового поля (identifier, в даному випадку - unit_id), дане поле зміниться всюди, і всі зв'язки збережуться.

Відповідь сервера:

При коректній обробці запиту сервер повертає код статусу 200 і змінений об'єкт із заповненим полем url.

ПРИМІТКА. Якщо змінювалось поле unit_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/units/5/", "unit_id": "5", "name": "Шт." }

Обмеження (Constraints):
  • Якщо об'єкт з ідентифікатором unit_id вже існує на сервері, то вказаний запит замінить об'єкт на сервері (replace) без попередження.
  • Поле 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." 
     ] 
}

8.2.3. PATCH /units/{id}/ - змінити значення окремих полів об'єкта

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

Вид команди: PATCH http://api.datawiz.io/api/v1/units/5/.json - замінити окремі поля об'єкта з unit_id=5 на інші

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

В запиті передається JSON-об'єкт з новим значенням окремих полів об'єкта

Важливі всі поля: unit_id, name.

Приклад запиту на заміну значення полів name для об'єкта з unit_id=5 у Довіднику одиниць виміру:

PATCH http://api.datawiz.io/api/v1/units/5/.json

{
     "name": "Уп.5шт." 
}
Відповідь сервера:

При коректній обробці запиту сервер повертає код статусу 200 і змінений об'єкт з заповненим полем url.

ПРИМІТКА! Якщо змінювалось поле unit_id, то і поле url також зміниться!

Приклад відповіді сервера:

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

{ "url": "http://api.datawiz.io/api/v1/units/5/", "unit_id": "5", "name": "Уп.5шт." }

Обмеження (Constraints):
  • Якщо об'єкт з ідентифікатором unit_id вже існує на сервері, то вказаний запит замінить об'єкт на сервері (replace) без попередження.
  • Поле 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." 
     ] 
}

8.2.4. DELETE /units/{id}/ - вилучити із Довідника одиниць виміру

Команда DELETE використовується для вилучення вказаного об'єкта із Довідника одиниць виміру

Вид команди: DELETE http://api.datawiz.io/api/v1/units/100/ - вилучити об'єкт з unit_id=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" }

8.2.5.OPTIONS /units/{id}/ - мета-інформація по структурі об'єкта

При виконанні даної команди повертається така JSON-структура:

OPTIONS /api/v1/units/1-100/

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

{ "name": "Unit Instance", "description": "Units", "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 }, "unit_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 } } } }

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