Список товарів, які постачає постачальник - datawizio/pythonAPI GitHub Wiki

30. Ресурс /supplier-products/ (Товари постачальника, Колекція, Тільки для читання)

Товари постачальника - це список всіх товарів, якими постачальник забезпечує конкретний магазин. З допомогою ресурсу /supplier-products/ можна отримати доступ до списку товарів постачальника. А також додавати нові товари

30.1. Структура об'єкта Supplier-products:

Назва поля Тип поля розмір Обов'язково Тільки читання Примітка
supplier_id рядок 200 так ні ідентифікатор постачальника, повинен відповідати id постачальника товару
shop_id рядок 200 так ні ідентифікатор магазину, повинен відповідати id магазину
product_id рядок 200 ні ні ідентифікатор товару, повинен відповідати id товару
deferment число - ні ні відстрочка
bonus число ні так ретро-бонус

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

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

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

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

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

Суфікси:
  • .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/supplier-products/.json

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

Приклад колекції з 2-х елементів: GET http://api.datawiz.io/api/v1/suppliers/?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/supplier-products/?page=2&page_size=2&format=api", 
    "previous": null, 
    "results": [
        {
            "supplier_id": "supplier-1",
            "shop_id": "shop-1",
            "product_id": "Молоко_05",
            "deferment": 10,
            "bonus": 20
        }, 
        {
            "supplier_id": "supplier-2",
            "shop_id": "shop-1",
            "product_id": "Кагор_05",
            "deferment": 10,
            "bonus": 20
        }, 
    ]
}
Повідомлення про помилку:

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

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

{ "detail": "Not found" }

19.2.2 POST /supplier-products/ - додати товар до списку поставки

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

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

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

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

{
            "supplier_id": "supplier-2",
            "shop_id": "shop-1",
            "product_id": "оболонь_05",
            "deferment": 11,
            "bonus": 20.5
}, 
Відповідь сервера:

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

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

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

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

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

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

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

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

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

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

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

OPTIONS /api/v1/supplier-products/


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

{   "name": "Supplier Products List",   "description": "",   "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,         "label": "Url"       },       "supplier_id": {         "type": "integer",         "required": true,         "read_only": false,         "label": "Supplier id"       },       "product_id": {         "type": "integer",         "required": true,         "read_only": false,         "label": "Product id"       },       "shop_id": {         "type": "integer",         "required": true,         "read_only": false,         "label": "Shop id"       },       "bonus": {         "type": "decimal",         "required": false,         "read_only": false,         "label": "Bonus"       },       "deferment": {         "type": "integer",         "required": false,         "read_only": false,         "label": "Deferment",         "min_value": -2147483648,         "max_value": 2147483647       }     }   } }

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