Rest API Список магазинів - datawizio/pythonAPI GitHub Wiki

1. Ресурс /shops/ (Список магазинів, Колекція, Тільки для читання)

Список магазинів - це список назв магазинів мережі клієнта і відповідні до них ідентифікатори. З допомогою ресурсу /shops/ можна отримати доступ "тільки для читання" до списку магазинів. Видаляти магазини через REST API не можна. Якщо необхідно добавити/видалити магазин з сервісу звертайтесь до адміністратора сервісу.

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

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

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

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

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

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

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

Суфікси:
  • .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/shops/.json/?search=unknown-string

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

Приклад колекції з 2-х елементів: GET http://api.datawiz.io/api/v1/shops/?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/shops/?page=2&page_size=2&format=api", 
    "previous": null, 
    "results": [
        {
            "url": "http://api.datawiz.io/api/v1/shops/3", 
            "shop_id": "3", 
            "name": "Shop 1"
            "address": "address Shop 1" 
            "longitude": "123"         
            "latitude": "123"
        }, 
        {
            "url": "http://api.datawiz.io/api/v1/shops/2", 
            "shop_id": "2", 
            "name": "Shop 2"
            "address": "address Shop 1" 
            "longitude": "123"         
            "latitude": "123"
        }
    ]
}
Повідомлення про помилку:

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

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

{ "detail": "Not found" }

1.2.2 POST /shop/ - додати один чи декілька магазинів

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

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

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

    Приклад запиту на додавання одного нового магазину: POST http://api.datawiz.io/api/v1/shops/.json

{
    "shop_id": "124", 
    "name": "Склад на олексадрівській", 
    "address": "Олександрова 5А", 
}
Відповідь сервера:

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

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

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

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

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

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

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

OPTIONS /api/v1/shops/

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

{ "name": "Shop List", "description": "", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ] }

2. Ресурс /shops/{id} - певний об'єкт із Списку магазинів з ідентифікатором {id}

Скориставшись ресурсом /shops/{id} можна завантажити з серверу об'єкт Shop із Списку магазинів. Для вибору потрібного об'єкта необхідно замінити {id} в URL ресурсу на ідентифікатор із поля shop_id існуючого об'єкта. Перелік наявних об'єктів та їх ідентифікатори можна отримати скориставшись командою GET /shops/ (детальніше див.вище розділ "1. Ресурс /shops/ (Список магазинів, Колекція, Тільки для читання)")

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

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

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

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

  • GET - отримати об'єкт з shop_id = {id}
  • OPTIONS - мета-інформація по структурі об'єкта
  • HEAD - аналог GET, але повертається тільки заголовок відповіді

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

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

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

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

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

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

{ "url": "http://api.datawiz.io/api/v1/shops/1", "shop_id": "1", "name": "Shop 1" "address": "address Shop 1" "longitude": "123"
"latitude": "123"

}

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

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

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

{ "detail": "Not found" }

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

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

OPTIONS /api/v1/shops/1/

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

{ "name": "Shop Detail", "description": "", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ] }

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