Rest API Справочник единиц измерения товаров - datawizio/pythonAPI GitHub Wiki

7. Ресурс /units/ (Справочник единиц измерения товаров, Коллекция)

Справочник единиц измерения - это список единиц измерение товаров (шт., кг., уп., и т.д.). С помощью ресурса /units/ можно получить доступ к списку единиц измерения товаров, а также добавлять в справочник новые ед.измерения.

7.1. Структура объекта:

Название поля Тип поля размер Обязательное Только чтение Примечание
url URL нет да url этого объекта
unit_id строка 50 да нет должен быть уникальным и соответствовать id единицы измерения с клиентской бухгалтерской программы
name строка 100 да нет наименование единицы измерения

7.2. Доступные команды

С ресурсом /units/ поддерживаются следующие команды:

  • GET - получить одну страницу коллекции
  • POST - добавить единицу измерения либо список единиц измерения в Справочник единиц измерения
  • OPTIONS - мета-информация по структуре объекта
  • HEAD - аналог GET, но возвращается только заголовок ответа

7.2.1. GET /units/ - получить одну страницу коллекции.

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

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

ЗАМЕЧАНИЕ: identifier - означает сортировать по полю unit_id

Ответ с сервера:

Объект "коллекция" из четырех полей (count,next, previous,results).

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

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

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

Пример коллекции из 2-х элементов: GET http://api.datawiz.io/api/v1/units/?format=json&page_size=2:

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

{ "count": 39, "next": "http://api.datawiz.io/api/v1/units/?page=2&page_size=2&format=api", "previous": null, "results": [ { "url": "http://api.datawiz.io/api/v1/units/1-1/", "unit_id": "1-1", "name": "Kassa 1", "shop_id": "1", "shop_url": "http://api.datawiz.io/api/v1/shops/1" }, { "url": "http://api.datawiz.io/api/v1/units/2-1/", "unit_id": "2-1", "name": "Kassa 1", "shop_id": "2", "shop_url": "http://api.datawiz.io/api/v1/shops/2" } ] }

Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанною в ключе detail:

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

{ "detail": "Not found" }

7.2.2. POST /units/ - добавить один объект в Справочник единиц измерения

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

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

В запросе передается JSON-объект типа словарь (dictionary), который описывает новый товар. Важны все поля: unit_id, name. Порядок следования полей не принципиален.

Пример запроса на добавление одного нового объекта в Справочник единиц измерения: POST http://api.datawiz.io/api/v1/units/.json

{
    "unit_id": "2", 
    "name": "кг" 
}
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 201 и статус создания обьекта.

Пример ответа сервера:

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

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

Условия и ограничение (Constraints):
  • Если объект с идентификатором unit_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Поле name не может быть пустым.
  • Поле 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." 
     ] 
}

7.2.3. POST /units/ - пакетное (bulk) добавление объектов в Справочник единиц измерения

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

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

В запросе передается JSON-объект типа список (list), который содержит один или более объект, описывающий новую единицу измерения. Передача на сервер объектов не по одиночке, а списком позволяет значительно увеличить скорость передачи объектов.

Пример запроса на пакетное добавление трёх новых объектов в Справочник единиц измерения: POST http://api.datawiz.io/api/v1/units/.json

[
    {
        "unit_id": "2", 
        "name": "кг" 
    }, 
    {
        "unit_id": "4", 
        "name": "уп 10шт"
    },
    {
        "unit_id": "4", 
        "name": "шт"
    }
]
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 201 и статистику по добавленным/изменённым объектам.

Пример ответа сервера:

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

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

Условия и ограничение (Constraints):
  • Если объект с идентификатором unit_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Поле name не может быть пустым.
  • Поле name должно быть уникальным (на сервере не должен уже существовать объект, с таким же именем)
Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанными в позиции объекта, в котором произошла ошибка, напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.

Пример ответа сервера при возникновении ошибки (поле name второго объекта не уникально):

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

[ {}, { "name": [ "The name 'уп 10шт' is already used for object with unit_id=4" ] }, {} ]

Как видно, ошибка произошла во втором объекте, в поле name. Тут же указана и причина ошибки.

7.2.4. OPTIONS /units/ - мета-информация по структуре объекта

При выполнении данной команды возвращается такая JSON-структура:

OPTIONS /api/v1/units/

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

{ "name": "Unit List", "description": "Units", "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 }, "unit_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 } } } }

8. Ресурс units/{id} - определенный объект из Справочника единиц измерения

Воспользовавшись ресурсом /units/{id} можно получить с сервера, модифицировать полностью и частично, а также удалить выбранный объект из Справочника единиц измерения. Для выбора нужного объекта необходимо заменить {id} в URL ресурса на идентификатор из поля unit_id существующего объекта. Перечень существующих объектов и их идентификаторов можно получить воспользовавшись командой 'GET /units/' (подробнее см.раздел "[7. Ресурс /units/ (Справочник единиц измерения, Коллекция)]")

8.1. Структура объекта:

Название поля Тип поля размер Обязательное Только чтение Примечание
url URL нет да url этого объекта
unit_id строка 50 да нет должен быть уникальным и соответствовать id единицы измерения с клиентской бухгалтерской программы
name строка 100 да нет наименование единицы измерения

8.2. Доступные команды:

С ресурсом /units/{id} поддерживаются следующие команды:

  • GET - получить объект с unit_id={id}
  • PUT - полностью заменить объект на сервере новым
  • PATCH - изменить значение отдельных полей объекта
  • DELETE - изъять из Справочника единиц измерения объект с unit_id={id}
  • OPTIONS - мета-информация по структуре объекта
  • HEAD - аналог GET, но возвращается только заголовок ответа

8.2.1. GET - получить объект с unit_id={id}

Вид команды: GET http://api.datawiz.io/api/v1/units/4 - получить объект с unit_id=4

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

При отправке на сервер команды GET /units/{id} с пустым телом запроса сервер возвращает объект заданной структуры в формате JSON или сообщение об ошибке.

Например, GET http://api.datawiz.io/api/v1/units/4/.json:

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

{ "url": "http://api.datawiz.io/api/v1/units/4/", "unit_id": "4", "name": "шт" }

Сообщение об ошибке:

В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail:

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

{ "detail": "Not found" }

8.2.2. PUT /units/{id}/ - полностью заменить объект на сервере новым

Фактически данный запрос работает, как два последовательных запроса: 1 Удалить объект со старым unit_id = {id} (DELETE) 2 Создать новый объект с новым unit_id (POST)

Вид команды: PUT http://api.datawiz.io/api/v1/units/4/.json - заменить объект с unit_id="4" на другой

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

В запросе передается JSON-объект с новым значением объекта

Важны все поля: unit_id, name.

Пример запроса на замену объекта в Справочнике единиц измерения:

PUT http://api.datawiz.io/api/v1/units/4/.json

{
    "unit_id": "44", 
    "name": "Шт."
}
}

Здесь замене подлежат поля unit_id и name. Нужно заметить, что при замене значения ключевого поля (identifier, в данном случае - unit_id), данное поле изменяется везде, и все связи сохраняются.

Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url.

ПРИМЕЧАНИЕ. Если менялось поле unit_id, то и поле url также изменится!

Пример ответа сервера:

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

{ "url": "http://api.datawiz.io/api/v1/units/5/", "unit_id": "5", "name": "Шт." }

Ограничение (Constraints):
  • Если объект с идентификатором unit_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Поле name не может быть пустым.
  • Поле 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." 
     ] 
}

8.2.3. PATCH /units/{id}/ - изменить значение отдельных полей объекта

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

Вид команды: PATCH http://api.datawiz.io/api/v1/units/5/.json - заменить отдельные поля объекта с unit_id=5 на другие

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

В запросе передается JSON-объект с новым значением отдельных полей объекта

Важны все поля: unit_id, name.

Пример запроса на замену значения полей name для объекта с unit_id=5 в Справочнике единиц измерения:

PATCH http://api.datawiz.io/api/v1/units/5/.json

{
     "name": "Уп.5шт." 
}
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url.

ПРИМЕЧАНИЕ! Если менялось поле unit_id, то и поле url также изменится!

Пример ответа сервера:

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

{ "url": "http://api.datawiz.io/api/v1/units/5/", "unit_id": "5", "name": "Уп.5шт." }

Ограничение (Constraints):
  • Если объект с идентификатором unit_id уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • Поле name не может быть пустым.
  • Поле 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." 
     ] 
}

8.2.4. DELETE /units/{id}/ - изъять из Справочника единиц измерения

Команда DELETE используется для извлечения указанного объекта из Справочника единиц измерения

Вид команды: DELETE http://api.datawiz.io/api/v1/units/100/ - изъять обьект с unit_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" }

8.2.5.OPTIONS /units/{id}/ - мета-информация по структуре объекта

При выполнении данной команды возвращается такая JSON-структура:

OPTIONS /api/v1/units/1-100/

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

{ "name": "Unit Instance", "description": "Units", "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 }, "unit_id": { "type": "string", "required": true, "read_only": false, "max_length": 50 }, "name": { "type": "string", "required": true, "read_only": false, "label": "name", "max_length": 100 } } } }

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