Rest API Довідник категорій товарів - datawizio/pythonAPI GitHub Wiki

5. Ресурс /categories/ (Довідник категорій товарів, Колекція)

Довідник категорій товарів - це ієрархічний (деревоподібний) список категорій товарів. З допомогою ресурсу /categories/ можна отримати доступ до списку категорій товарів, а також додавати в довідник нові категорії та видаляти не потрібні.

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

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

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

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

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

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

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

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

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

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

GET http://api.datawiz.io/api/v1/categories/.json/?search=unknown-name

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

Приклад колекції із 2-х елементів, отриманих по запиту: "повернути всіх 'дітей' вказаної категорії": GET http://api.datawiz.io/api/v1/categories/?parent_id=2:

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

{ "count": 2, "next": null, "previous": null, "results": [ { "url": "http://api.datawiz.io/api/v1/categories/3/", "category_id": "3", "name": "cat1", "parent_id": "2", "parent_url": "http://api.datawiz.io/api/v1/categories/2/" }, { "url": "http://api.datawiz.io/api/v1/categories/4/", "category_id": "4", "name": "cat2", "parent_id": "2", "parent_url": "http://api.datawiz.io/api/v1/categories/2/" } ] }

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

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

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

{ "detail": "Not found" }

5.2.2. POST /categories/ - добавити один об'єкт в Довідник категорій товарів

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

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

В запиті передається JSON-об'єкт типу словник (dictionary), який описує нову категорію. Важливі всі поля: category_id, parent_id та name. Поле parent_id може приймати значення null, якщо категорія не має батьківської (категорії верхнього рівня). Порядок слідування полів не принциповий.

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

{
    "category_id": "124", 
    "name": "Хлібо-булочні вироби", 
    "parent_id": "2", 
}
Відповідь сервера:

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

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

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

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

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

5.2.3. POST /categories/ - пакетне (bulk) додавання об'єктів в Довідник категорій товарів

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

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

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

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

[
    {
        "category_id": "124", 
        "name": "Хлібо-булочні вироби", 
        "parent_id": "2" 
    },
    {
        "category_id": "125", 
        "name": "Молочні продукти", 
        "parent_id": "2" 
    },
    {
        "category_id": "126", 
        "name": "Кулінарія", 
        "parent_id": "2" 
    }
]
Відповідь сервера:

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

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

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

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

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

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

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

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

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

[ { "parent_id": [ "Parent category with id=122 does not exist" ] }, {} ]

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

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

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

OPTIONS /api/v1/categories/

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

{ "name": "Category List", "description": "Categories", "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 }, "category_id": { "type": "string", "required": true, "read_only": false, "max_length": 100 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 200 }, "parent_id": { "type": "string", "required": false, "read_only": false, "max_length": 100 }, "parent_url": { "type": "field", "required": false, "read_only": true } } } }

6. Ресурс categories/{id} - визначений об'єкт із Довідника категорій товарів

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

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

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

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

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

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

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

Вид команди: GET http://api.datawiz.io/api/v1/categories/1-1 - отримати об'єкт з category_id="1-1"

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

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

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

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

{ "url": "http://api.datawiz.io/api/v1/categories/126/", "category_id": "126", "name": "Кулінарія", "parent_id": "2", "parent_url": "http://api.datawiz.io/api/v1/categories/2/" }

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

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

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

{ "detail": "Not found" }

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

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

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

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

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

Важливі всі три поля: category_id, parent_id і name. Поле parent_id може приймати значення null, якщо категорія не має батьківської (категорія верхнього рівня). Порядок слідування полів не принциповий.

Приклад запиту на заміну об'єкта в Списку касових терміналів:

PUT http://api.datawiz.io/api/v1/categories/126/.json

{
     "category_id": "126", 
     "name": "Кулінарія (нова)",
     "parent_id": "3"
}

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

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

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

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

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

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

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

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

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

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

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

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

Важливі всі три поля: category_id, shop_id і name.

Приклад запиту на заміну значення поля name для об'єкта з category_id=100 в Довіднику категорій товарів:

PATCH http://api.datawiz.io/api/v1/categories/100/.json

{
     "name": "category #100" 
}
Відповідь сервера:

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

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

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

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

{ "url": "http://api.datawiz.io/api/v1/categories/100/", "category_id": "100", "name": "category #100", "parent_id": "3", "parent_url": "http://api.datawiz.io/api/v1/categories/3/" }

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

6.2.4. DELETE /categories/{id}/ - вилучити із Довідника категорій товарів

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

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

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

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

OPTIONS /api/v1/categories/100/

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

{ "name": "Category Instance", "description": "Categories", "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 }, "category_id": { "type": "string", "required": true, "read_only": false, "max_length": 100 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 200 }, "parent_id": { "type": "string", "required": false, "read_only": false, "max_length": 100 }, "parent_url": { "type": "field", "required": false, "read_only": true } } } }

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