Rest API Список документов на перемещение товара - datawizio/pythonAPI GitHub Wiki
Документ на перемещение товара - это документ с указанными деталями по поводу перемещения товара между складами и магазинами. С помощью ресурса /relocate-documents/
можно получить доступ к списку документов на получение товаров. А также добавлять в справочник новые документы на получение.
Название поля | Тип поля | размер | Обязательно | Только чтение | Примечание |
---|---|---|---|---|---|
relocate_id |
строка | да | нет | идентификатор документа | |
url |
URL | нет | да | url этого объекта | |
price_total |
число | да | нет | общая стоимость | |
relocate_date |
дата, время | 50 | да | нет | дата и время документа на перемещение товара |
responsible |
строка | да | нет | ответственный | |
sender_shop_id |
URL | 50 | нет | нет | идентификатор магазина отправителя |
sender_shop_url |
URL | нет | да | url этого объекта | |
receiver_shop_id |
строка | 50 | нет | нет | идентификатор магазина получателя |
receiver_shop_url |
URL | нет | да | url этого объекта | |
products |
список | да | нет | массив товаров |
Каждый товар содержит в себе некие характеристики, которые можно представить в следующей структуре:
Название поля | Тип поля | размер | Обязательно | Только чтение | Примечание |
---|---|---|---|---|---|
product_id |
строка | 200 | да | нет | идентификатор товара с Справочника по товарам (смотр.[/products/ ]) |
product_url |
URL | нет | да | url идентификатора товара | |
qty |
число | да | да | количество | |
price |
число | нет | нет | реальная стоимость позиции (если это поле отсутствует, или price *qty <> price_total , то вычисляется, как price_total /qty ) |
|
price_total |
число | да | нет | общая стоимость позиции (= цена * количество) |
Для управления ресурсом /relocate-documents/
поддерживаются следующие команды:
-
GET
- получить одну страницу коллекции -
POST
- загрузить документы на перемещение товара -
OPTIONS
- мета-информация по структуре объекта -
HEAD
- аналогGET
, но возвращается только заголовок ответа
Вид команды: GET http://api.datawiz.io/api/v1/relocate-documents
-
.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/relocate-documents/?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/relocate-documents/?page=2&page_size=2&format=api",
"previous": null,
"results": [
{
"relocate_id": "11112",
"url": "http://api.datawiz.io/api/v1/relocate-documents/11112/",
"price_total": "48.0000",
"relocate_date": "2016-01-01T00:00:00",
"responsible": "",
"sender_shop_id": null,
"sender_shop_url": null,
"receiver_shop_id": null,
"receiver_shop_url": null,
"products": [
{
"product_id": "a26f866b-1465-11e5-80cb-a01d4897e530",
"product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e530/",
"qty": "2.0000",
"price": "10.0000",
"price_total": "20.0000"
}
{
"product_id": "a26f866b-1465-11e5-80cb-a01d4897e531",
"product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e531/",
"qty": "2.0000",
"price": "14.0000",
"price_total": "28.0000"
}
]
},
{
"relocate_id": "11114",
"url": "http://api.datawiz.io/api/v1/relocate-documents/11114/",
"price_total": "33.0000",
"relocate_date": "2016-02-01T00:00:00",
"responsible": "",
"sender_shop_id": null,
"sender_shop_url": null,
"receiver_shop_id": null,
"receiver_shop_url": null,
"products": [
{
"product_id": "a26f866b-1465-11e5-80cb-a01d4897e531",
"product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e531/",
"qty": "3.0000",
"price": "10.0000",
"price_total": "30.0000"
}
{
"product_id": "a26f866b-1465-11e5-80cb-a01d4897e532",
"product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e532/",
"qty": "3.0000",
"price": "1.0000",
"price_total": "3.0000"
}
]
}
]
}
В случае ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail
и / или в поле http.response.content
:
HTTP 404 NOT FOUND
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS, PATCH
{
"detail": "Not found"
}
Вид команды: POST http://api.datawiz.io/api/v1/relocate-documents/?format=json
-
.json
- получить ответ с сервера в формате JSON -
.api
- получить ответ с сервера в формате HTML (тестовая платформа)
-
format = json | api
- аналог вышеуказанных суффиксов
В запросе передается JSON-объект типа словарь (dictionary), который описывает документ на получение продукта. Важные поля: relocate_id
, relocate_date
, price_total
, responsible
, products
, product_id
, qty
, price
. Последовательность полей не принципиальна.
Пример запроса на загрузку документа на перемещение товара:
POST http://api.datawiz.io/api/v1/relocate-documents/.json
{
"relocate_id": "11113",
"url": "http://api.datawiz.io/api/v1/relocate_documents/11113/",
"price_total": "30.0000",
"relocate_date": "2016-02-01T00:00:00",
"responsible": "",
"sender_shop_id": null,
"sender_shop_url": null,
"receiver_shop_id": null,
"receiver_shop_url": null,
"products": [
{
"product_id": "a26f866b-1465-11e5-80cb-a01d4897e530",
"qty": "3.0000",
"price": "10.0000",
"price_total": "30.0000"
}
]
}
При корректной обработке запроса сервер возвращает код статуса 201 и статус создания объекта.
Пример ответа сервера:
HTTP 201 CREATED
Content-Type: application/json
Vary: Accept
Location: http://api.datawiz.io/api/v1/relocate-documents/124/
Allow: GET, POST, HEAD, OPTIONS
{
"updated": 0,
"inserted": 1
}
- Если объект с идентификатором
relocate_id
уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения. - Нельзя добавить на сервер объект, если не существует товара с указанным идентификатором
product_id
В случае ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным напротив имени поля, с которым эта ошибка связана. Если ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors
.
ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) строчных символов.
Пример ответа сервера при возникновении ошибки (поле product_id
передано пустым):
HTTP 400 BAD REQUEST
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"product_id": [
"This field is required."
]
}
При выполнении данной команды возвращается такая JSON-структура:
OPTIONS /api/v1/relocate-documents/
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"name": "Relocate Document List",
"description": "this is my text. You can see this text on the REST-page",
"renders": [
"application/json",
"text/html"
],
"parses": [
"application/json",
"application/x-www-form-urlencoded",
"multipart/form-data"
],
"actions": {
"POST": {
"relocate_id": {
"type": "string",
"required": true,
"read_only": false,
"label": "Relocate id"
},
"url": {
"type": "field",
"required": false,
"read_only": true,
"label": "Url"
},
"price_total": {
"type": "decimal",
"required": true,
"read_only": false,
"label": "Total price"
},
"relocate_date": {
"type": "datetime",
"required": true,
"read_only": false,
"label": "Relocate date"
},
"responsible": {
"type": "string",
"required": true,
"read_only": false,
"label": "Responsible",
"max_length": 200
},
"sender_shop_id": {
"type": "string",
"required": false,
"read_only": false,
"label": "Sender shop id",
"max_length": 50
},
"sender_shop_url": {
"type": "field",
"required": false,
"read_only": true,
"label": "Sender shop url"
},
"receiver_shop_id": {
"type": "string",
"required": false,
"read_only": false,
"label": "Receiver shop id",
"max_length": 50
},
"receiver_shop_url": {
"type": "field",
"required": false,
"read_only": true,
"label": "Receiver shop url"
},
"products": {
"type": "field",
"required": true,
"read_only": false,
"label": "Products",
"child": {
"type": "nested object",
"required": true,
"read_only": false,
"children": {
"product_id": {
"type": "string",
"required": true,
"read_only": false,
"label": "Product id"
},
"product_url": {
"type": "field",
"required": false,
"read_only": true,
"label": "Product url"
},
"qty": {
"type": "decimal",
"required": true,
"read_only": false,
"label": "Qty"
},
"price": {
"type": "decimal",
"required": true,
"read_only": false,
"label": "Price"
},
"price_total": {
"type": "decimal",
"required": true,
"read_only": false,
"label": "Total price"
}
}
}
}
}
}
}