Rest API Довідник категорій товарів - datawizio/pythonAPI GitHub Wiki
Довідник категорій товарів - це ієрархічний (деревоподібний) список категорій товарів. З допомогою ресурсу /categories/
можна отримати доступ до списку категорій товарів, а також додавати в довідник нові категорії та видаляти не потрібні.
Назва поля | Тип поля | розмір | Обов'язково | Тільки читання | Примітка |
---|---|---|---|---|---|
url |
URL | ні | так | url цього об'єкта | |
category_id |
рядок | 50 | так | ні | повинен бути унікальним та відповідати id категорії товару з клієнтської бухгалтерської програми |
parent_id |
рядок | 50 | так | ні | ідентифікатор батьківської категорії чи null (для категорій верхнього рівня). parent_id повинен відповідати id категорії товару з клієнтської бухгалтерської програми |
name |
рядок | 100 | так | ні | найменування категорії товару |
parent_url |
URL | ні | так | URL батьківської категорії |
З ресурсом /categories/
підтримуються наступні команди:
-
GET
- отримати одну сторінку колекції -
POST
- добавити нову категорію товару або список категорій в Довідник категорій товарів -
OPTIONS
- мета-інформація по структурі об'єкта -
HEAD
- аналогGET
, але повертається тільки заголовок відповіді
Вид команди: 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"
}
Вид команди: 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
}
- Якщо об'єкт із ідентифікатором
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."
]
}
Вид команди: 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
}
- Якщо об'єкт з ідентифікатором
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
. Тут вказана і причина помилки.
При виконанні даної команди повертається така 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
}
}
}
}
Скориставшись ресурсом /categories/{id}
можна отримати з сервера, модифікувати повністю чи частково, а також видалити вибраний об'єкт із Довідника категорій товарів. Для вибору потрібного об'єкта необхідно замінити {id}
в URL ресурсу на ідентифікатор із поля category_id
існуючого об'єкта. Перелік існуючих об'єктів і їх ідентифікаторів можна отримати скориставшись командою 'GET /categories/' (детальніше див.розділ "[5. Ресурс /categories/
(Довідник категорій товарів, Колекція)]")
Назва поля | Тип поля | розмір | Обов'язково | Тільки читання | Примітка |
---|---|---|---|---|---|
url |
URL | ні | так | url цього об'єкта | |
category_id |
рядок | 50 | так | ні | повинен бути унікальним та відповідатиid категорії товару з клієнтської бухгалтерської програми |
parent_id |
рядок | 50 | так | ні | ідентифікатор батьківської категорії чи null (для категорій верхнього рівня). parent_id повинен відповідати id категорії товару з клієнтської бухгалтерської програми |
name |
рядок | 100 | так | ні | найменування категорії товару |
parent_url |
URL | ні | так | URL батьківської категорії |
З ресурсом /categories/{id}
підтримують наступні команди:
-
GET
- отримати об'єкт зcategory_id={id}
-
PUT
- повністю замінити об'єкт на сервері новим -
PATCH
- змінити значення окремих полів об'єкта -
DELETE
- вилучити із Довідника категорій товарів об'єкт зcategory_id={id}
-
OPTIONS
- мета-інформація по структурі об'єкта -
HEAD
- аналогGET
, але повертається тільки заголовок відповіді
Вид команди: 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"
}
Фактично даний запит працює, як два послідовних запити:
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
}
- Якщо об'єкт з ідентифікатором
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."
]
}
Команда 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/"
}
- Якщо об'єкт з ідентифікатором
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."
]
}
Команда 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
- Не можна видалити категорію, якщо у неї є 'діти' і/або на неї посилаються об'єкти із Довідника номенклатури (Довідника товарів)
У випадку виникнення помилки сервер повертає відповідь із відповідним статусом, а також повідомленням про помилку, записаним в ключі detail
:
HTTP 404 NOT FOUND
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH
{
"detail": "Not found"
}
При виконанні даної команди повертається така 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
}
}
}
}