Rest API Список кассовых терминалов для каждого из магазинов - datawizio/pythonAPI GitHub Wiki
Список кассовых терминалов - это список терминалов обслуживания покупателей (кассовые терминалов) применительно к каждому магазину торговой сети. С помощью ресурса /terminals/
можно получить доступ к списку кассовых терминалов, а также добавлять в справочник новые терминалы.
Название поля | Тип поля | размер | Обязательное | Только чтение | Примечание |
---|---|---|---|---|---|
url |
URL | нет | да | url этого объекта | |
terminal_id |
строка | 50 | да | нет | должен быть уникальным и соответствовать id кассового терминала с клиентской бухгалтерской программы |
shop_id |
строка | 50 | да | нет | код магазина из справочника /shops/ (см.п.1) |
name |
строка | 100 | да | нет | наименование (либо код) кассового терминала, принятый для его обозначение в конкретном магазине |
shop_url |
URL | нет | да | URL магазина |
С ресурсом /terminals/
поддерживаются следующие команды:
-
GET
- получить одну страницу коллекции -
POST
- добавить новый терминал либо список терминалов в Список кассовых терминалов -
OPTIONS
- мета-информация по структуре объекта -
HEAD
- аналогGET
, но возвращается только заголовок ответа
Вид команды: GET http://api.datawiz.io/api/v1/terminals/
-
.json
- Получить ответ с сервера в формате JSON -
.api
- Получить ответ с сервера в формате HTML (тестовая площадка)
-
format=json|api
- аналог вышеуказанных суффиксов -
page_size={nn}
- установить размер страницы равный{nn}
объектов -
page={n}
- скачать страницу{n}
-
shop_id={n}
- отображать только терминалы, принадлежащие магазину с id={n}
-
search = {substring}
- отображать только объекты, в полеname
которых найдено фрагмент "{substring}" -
ordering=name|identifier
- сортировать по полю в алфавитном порядке (от меньшего - к большему) -
ordering=-name|-identifier
- сортировать по полю в обратном порядке
ЗАМЕЧАНИЕ: identifier
- означает сортировать по полю terminal_id
Объект "коллекция" из четырех полей (count
,next
, previous
,results
).
Пример пустой коллекции, полученной в результате запроса:
GET http://api.datawiz.io/api/v1/terminals/.json/?search=unknown-shop_id
{
"count": 0,
"next": null,
"previous": null,
"results": []
}
Пример коллекции из 2-х элементов:
GET http://api.datawiz.io/api/v1/terminals/?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/terminals/?page=2&page_size=2&format=api",
"previous": null,
"results": [
{
"url": "http://api.datawiz.io/api/v1/terminals/1-1/",
"terminal_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/terminals/2-1/",
"terminal_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"
}
Вид команды: POST http://api.datawiz.io/api/v1/terminals/?format=json
-
.json
- Взаимодействовать с сервером в формате JSON -
.api
- Взаимодействовать с сервером в формате HTML (тестовая площадка)
- `format=json - взаимодействовать с сервером в формате JSON
- `format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
В запросе передается JSON-объект типа словарь (dictionary), который описывает новый товар. Важны все три поля: terminal_id
, shop_id
и name
. Порядок следования полей не принципиален.
Пример запроса на добавление одного нового объекта в Список кассовых терминалов:
POST http://api.datawiz.io/api/v1/terminals/.json
{
"terminal_id": "1-4",
"shop_id": "1",
"name": "New terminal"
}
При корректной обработке запроса сервер возвращает код статуса 201 и статус создания обьекта.
Пример ответа сервера:
HTTP 201 CREATED
Content-Type: application/json
Vary: Accept
Location: http://api.datawiz.io/api/v1/terminals/1-4/
Allow: GET, POST, HEAD, OPTIONS
{
"updated": 0,
"inserted": 1
}
- Если объект с идентификатором
terminal_id
уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения. - Нельзя добавить на сервер объект, если не существует магазина с указанным идентификатором
shop_id
- Поле
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."
]
}
Вид команды: POST http://api.datawiz.io/api/v1/terminals/?format=json
-
.json
- Взаимодействовать с сервером в формате JSON -
.api
- Взаимодействовать с сервером в формате HTML (тестовая площадка)
- `format=json - взаимодействовать с сервером в формате JSON
- `format=api - взаимодействовать с сервером в формате HTML (тестовая площадка)
В запросе передается JSON-объект типа список (list), который содержит один или более объект, описывающий новый терминал. Передача на сервер объектов не по одиночке, а списком позволяет значительно увеличить скорость передачи объектов.
Пример запроса на пакетное добавление трёх новых объектов в Список кассовых терминалов:
POST http://api.datawiz.io/api/v1/terminals/.json
[
{
"terminal_id": "1-4",
"shop_id": "1",
"name": "Terminal 4",
},
{
"terminal_id": "2-1",
"shop_id": "2",
"name": "Kassa 1",
},
{
"terminal_id": "2-2",
"shop_id": "2",
"name": "Kassa 2",
}
]
При корректной обработке запроса сервер возвращает код статуса 201 и статистику по добавленным/изменённым объектам.
Пример ответа сервера:
HTTP 201 CREATED
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"updated": 0,
"inserted": 3
}
- Если объект с идентификатором
terminal_id
уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения. - Нельзя добавить на сервер объект, если не существует магазина с указанным идентификатором
shop_id
- Поле
name
не может быть пустым - Поле
name
должно быть уникальным в пределах одного магазина
В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщениями об ошибке, записанными в позиции объекта, в котором произошла ошибка, напротив имени поля, с которым эта ошибка связана. Если же ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors
.
ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) символьных строк.
Пример ответа сервера при возникновении ошибки (поле shop_id
второго объекта передано неверным):
HTTP 400 BAD REQUEST
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
[
{},
{
"shop_id": [
"Shop with id=33 does not exist"
]
},
{}
]
Как видно, ошибка произошла во втором объекте, в поле shop_id
. Тут же указана и причина ошибки.
При выполнении данной команды возвращается такая JSON-структура:
OPTIONS /api/v1/terminals/
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"name": "Terminal List",
"description": "Terminals",
"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
},
"terminal_id": {
"type": "string",
"required": true,
"read_only": false,
"max_length": 50
},
"name": {
"type": "string",
"required": true,
"read_only": false,
"label": "name",
"max_length": 100
},
"shop_id": {
"type": "string",
"required": true,
"read_only": false,
"max_length": 50
},
"shop_url": {
"type": "field",
"required": false,
"read_only": true
}
}
}
}
Воспользовавшись ресурсом /terminals/{id}
можно получить с сервера, модифицировать полностью и частично, а также удалить выбранный объект из Списка кассовых терминалов. Для выбора нужного объекта необходимо заменить {id}
в URL ресурса на идентификатор из поля terminal_id
существующего объекта. Перечень существующих объектов и их идентификаторов можно получить воспользовавшись командой 'GET /terminals/' (подробнее см.раздел "[3. Ресурс /terminals/
(Список кассовых терминалов для каждого из магазинов, Коллекция)]")
Название поля | Тип поля | размер | Обязательное | Только чтение | Примечание |
---|---|---|---|---|---|
url |
URL | нет | да | url этого объекта | |
terminal_id |
строка | 50 | да | нет | должен быть уникальным и соответствоватьid кассового терминала с клиентской бухгалтерской программы |
shop_id |
строка | 50 | да | нет | код магазина из справочника /shops/ (см.п.1) |
name |
строка | 100 | да | нет | наименование (либо код) кассового терминала, принятый для его обозначение в конкретном магазине |
shop_url |
URL | 100 | нет | да | URL магазина |
С ресурсом /terminals/{id}
поддерживаются следующие команды:
-
GET
- получить объект сterminal_id={id}
-
PUT
- полностью заменить объект на сервере новым -
PATCH
- изменить значение отдельных полей объекта -
DELETE
- изъять из Списка кассовых терминалов объект сterminal_id={id}
-
OPTIONS
- мета-информация по структуре объекта -
HEAD
- аналогGET
, но возвращается только заголовок ответа
Вид команды: GET http://api.datawiz.io/api/v1/terminals/CAT11
- получить объект с terminal_id="CAT11"
-
.json
- Получить ответ с сервра в формате JSON -
.api
- Получить ответ с сервра в формате HTML (тестовая площадка)
-
format=json|api
- установить формат данных. Аналог вышеуказанных суффиксов
При отправке на сервер команды GET /terminals/{id}
с пустым телом запроса сервер возвращает объект заданной структуры в формате JSON или сообщение об ошибке.
Например, GET http://api.datawiz.io/api/v1/terminals/1-1/.json
:
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH
{
"url": "http://api.datawiz.io/api/v1/terminals/1-1/",
"terminal_id": "1-1",
"name": "Kassa 1",
"shop_id": "1",
"shop_url": "http://api.datawiz.io/api/v1/shops/1"
}
В случае возникновения ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail
:
HTTP 404 NOT FOUND
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH
{
"detail": "Not found"
}
Фактически данный запрос работает, как два последовательных запроса:
1 Удалить объект со старым terminal_id = {id} (DELETE
)
2 Создать новый объект с новым terminal_id
(POST
)
Вид команды: PUT http://api.datawiz.io/api/v1/terminals/1-1/.json
- заменить объект с terminal_id="1-1" на другой
-
.json
- Взаимодействовать с сервером в формате JSON -
.api
- Взаимодействовать с сервером в формате HTML (тестовая площадка)
-
format=json
- взаимодействовать с сервером в формате JSON -
format=api
- взаимодействовать с сервером в формате HTML (тестовая площадка)
В запросе передается JSON-объект с новым значением объекта
Важны все три поля: terminal_id
, shop_id
и name
.
Пример запроса на замену объекта в Списке кассовых терминалов:
PUT http://api.datawiz.io/api/v1/terminals/1-1/.json
{
"terminal_id": "1-100",
"name": "Another Name",
"shop_id": "1"
}
Здесь замене подлежат поля terminal_id
и name
. Нужно заметить, что при замене значения ключевого поля (identifier
, в данном случае - terminal_id
), данное поле изменяется везде, и все связи сохраняются.
При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url
.
ПРИМЕЧАНИЕ. Если менялось поле terminal_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/terminals/1-100/",
"terminal_id": "1-100",
"name": "Another Name",
"shop_id": "1",
"shop_url": "http://api.datawiz.io/api/v1/shops/1"
}
- При замене нельзя указать другой
terminal_id
, если уже существует объект с таким жеterminal_id
- Поле
shop_id
должно содержать корректное значение из справочника Список магазинов (см.п.1) - Поле
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."
]
}
Команда PATCH
используется, если нужно изменить отдельные поля объекта. Команда PATCH
во всем похожа на команду PUT
, только в ней можно указывать не весь объект, а только те поля, которые необходимо изменить.
Вид команды: PATCH http://api.datawiz.io/api/v1/terminals/1-100/.json
- заменить отдельные поля объекта с terminal_id=1-100
на другие
-
.json
- Взаимодействовать с сервером в формате JSON -
.api
- Взаимодействовать с сервером в формате HTML (тестовая площадка)
-
format=json
- взаимодействовать с сервером в формате JSON -
format=api
- взаимодействовать с сервером в формате HTML (тестовая площадка)
В запросе передается JSON-объект с новым значением отдельных полей объекта
Важны все три поля: terminal_id
, shop_id
и name
.
Пример запроса на замену значения поля name
для объекта с terminal_id=1-100
в Списке кассовых терминалов:
PATCH http://api.datawiz.io/api/v1/terminals/1-100/.json
{
"name": "Terminal #100"
}
При корректной обработке запроса сервер возвращает код статуса 200 и измененный объект с заполненным полем url
.
ПРИМЕЧАНИЕ! Если менялось поле terminal_id
, то и поле url
также изменится!
Пример ответа сервера:
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"url": "http://api.datawiz.io/api/v1/terminals/1-100/",
"terminal_id": "1-100",
"name": "Terminal #100",
"shop_id": "1",
"shop_url": "http://api.datawiz.io/api/v1/shops/1"
}
- При замене нельзя указывать другой
terminal_id
, если уже существует объект с таким жеterminal_id
. - Поле
shop_id
должно содержать корректное значение из справочника Список магазинов (см.п.1) - Поле
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."
]
}
Команда DELETE
используется для извлечения указанного объекта из Списка кассовых терминалов
Вид команды: DELETE http://api.datawiz.io/api/v1/terminals/1-100/
- изъять обьект с terminal_id=1-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/terminals/1-100/
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, PUT, DELETE, HEAD, OPTIONS, PATCH
{
"name": "Terminal Instance",
"description": "my Terminal doc",
"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
},
"terminal_id": {
"type": "string",
"required": true,
"read_only": false,
"max_length": 50
},
"name": {
"type": "string",
"required": true,
"read_only": false,
"label": "name",
"max_length": 100
},
"shop_id": {
"type": "string",
"required": true,
"read_only": false,
"max_length": 50
},
"shop_url": {
"type": "field",
"required": false,
"read_only": true
}
}
}
}