Rest API Список залишків - datawizio/pythonAPI GitHub Wiki

18. Ресурс /product-inventory/ (Список залишків, Колекція, Тільки для читання)

Список залишків - це перелік залишків товарів у магазинах мережі клієнта. З допомогою ресурсу /product-inventory/ можна отримати доступ до списку залишків товарів. А також додавати інформацію про залишки

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

Назва поля Тип поля розмір Обов'язково Тільки читання Примітка
date рядок так так дата
shop_id рядок 50 так так повинен відповідати id магазину з клієнтської бухгалтерської програми
product_id рядок 100 так так повинен відповідати id товару з клієнтської бухгалтерської програми
qty число так так кількість
original_price число ні так ціна за одиницю товару
stock_total_price число ні так вартість товарів на залишку, вираховується як qty*original_price

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

Для управління ресурсом /product-inventory/ підтримуються наступні команди:

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

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

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

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

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

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

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

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

Приклад колекції з 2-х елементів: GET http://api.datawiz.io/api/v1/product-inventory/?format=api&page_size=2:

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
{
    "count": 11, 
    "next": "http://api.datawiz.io/api/v1/product-inventory/?page=2&page_size=2&format=api", 
    "previous": null, 
    "results": [
        {
            "date": "2016-06-07"
            "shop_id": "3", 
            "product_id": "6313"
            "qty": "1.0000"             
            "original_price": "45.6600"         
            "stock_total_price": "0.00"
        }, 
        {
            "date": "2016-06-07"
            "shop_id": "3", 
            "product_id": "6343"
            "qty": "2.0000"             
            "original_price": "46.6700"         
            "stock_total_price": "0.00"
        }
    ]
}
Повідомлення про помилку:

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

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

{ "detail": "Not found" }

18.2.2 POST /product-inventory/ - додати інформацію по залишках для одного, чи декількох товарів

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

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

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

    Приклад запиту на завантаження інформації про залишки товару: POST http://api.datawiz.io/api/v1/product-inventory/.json

{
    "date": "2016-06-07"
    "shop_id": "3", 
    "product_id": "6343"
    "qty": "2.0000"             
    "original_price": "46.6700"         
    "stock_total_price": "0.00"
}
Відповідь сервера:

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

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

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

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

Умови та обмеження (Constraints):
  • Якщо об'єкт з ідентифікатором product_id, shop_id, date вже існує на сервері, то вказаний запит замінить об'єкт на сервері (replace) без попередження.
  • stock_total_price повинен бути рівним original_price*qty.
  • Не можна додати на сервер об'єкт, якщо не існує магазину з вказаним ідентифікатором shop_id
  • Не можна додати на сервер об'єкт, якщо не існує товару з вказаним ідентифікатором product_id
Повідомлення про помилку:

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

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

Приклад відповіді сервера при виникненні помилки (поле qty передано порожнім):

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

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

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

OPTIONS /api/v1/product-inventory/

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

{ "name": "Product Inventory List", "description": "", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ], "actions": { "POST": { "date": { "type": "datetime", "required": true, "read_only": false, "label": "Date" }, "shop_id": { "type": "string", "required": true, "read_only": false, "label": "Shop id" }, "product_id": { "type": "string", "required": true, "read_only": false, "label": "Product id" }, "qty": { "type": "decimal", "required": true, "read_only": false, "label": "Qty" }, "original_price": { "type": "decimal", "required": false, "read_only": false, "label": "Price" }, "stock_total_price": { "type": "decimal", "required": false, "read_only": false, "label": "Total price" } } } }

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