Страница 1 из 1

Запись полей через REST API

Добавлено: 17 апр 2019, 15:19
mamol27
Здравствуйте.

У меня есть сущность.
Изображение
Со следующими полями.
Изображение
Доступ к REST api открыт
Изображение
Но запись не происходит
Изображение

Каков должен быть формат чтобы запись прошла успешно?

Re: Запись полей через REST API

Добавлено: 17 апр 2019, 16:07
mamol27
Крайне странно, что на ошибочный запрос отсылается статус 200(OK)
200 '{"status":"error","error_code":"","error_message":"key is required"}'

Я проверил 10 раз, "key" Совпадает c api ключом

Re: Запись полей через REST API

Добавлено: 17 апр 2019, 17:28
support
Если ключи не совпадают, было бы сообщение "API Key mismatch"
А так что то ключ не доходит туда вообще. Вы как передаете? Какая версия программы.
Ранее было нужно использовать только POST запрос. В 2.4.1 можно и GET

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 11:45
mamol27
Версия "Руководителя" с дополнением 2.4.1
отправляю post запрос

Код: Выделить всё

import requests
import openpyxl as xl

url = "http://----------------/rukovoditel/api/rest.php"
BOOK = '/home/sas/Documents/РУКОВОДИТЕЛЬ-2019-04-05_v1.xlsx'

query_pattern = '''{
"key":"---------------",
"username": "admin",
"password": "admin",
"action": "%s", 
"entity_id": %s,
%s
}'''


def send_contract_json(contract_list):
    for e in contract_list:
        items = '''"items": { 
        "field_454": %s, 
        "field_455": "%s" 
        }''' % (str(e[0]), str(e[1]))

        query = query_pattern % (u"insert", str(42), items)
        print(query)

        response = requests.post(url, data=query.encode('utf-8'))

        print(response.status_code, response.content, "\n")

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 12:08
support
Вы отправляете строку в json, а нужно отправлять конкретные переменные.

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 12:33
mamol27
support писал(а): 18 апр 2019, 12:08 Вы отправляете строку в json, а нужно отправлять конкретные переменные.
Что то я не понял, можно по подробнее? Какого формата должна быть строка, чтобы запрос обрабатывался корректно?
Мой пример идентичный viewtopic.php?f=2&t=1839&hilit=REST , который вроде бы сработал

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 13:01
support
Смотрите пример тут https://www.rukovoditel.net/ru/api.html
Переменные передаются как POST переменные, а не как json строка.

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 13:48
mamol27
support писал(а): 18 апр 2019, 13:01 Смотрите пример тут https://www.rukovoditel.net/ru/api.html
Переменные передаются как POST переменные, а не как json строка.
Понял, исправил, теперь ошибка выглядит так:

Код: Выделить всё

{
'items': [
    {'field_454': 1, 'field_455': '-----'},
    {'field_454': 2, 'field_455': '-----'},
    {'field_454': 3, 'field_455': '-----'},
    {'field_454': 4, 'field_455': '-----'},
    {'field_454': 5, 'field_455': '-----'},
    {'field_454': 6, 'field_455': '-----'},
    {'field_454': 7, 'field_455': '-----'},
    {'field_454': 8, 'field_455': '-----'},
    {'field_454': 9, 'field_455': '-----'},
    {'field_454': 10, 'field_455': '-----'},
    {'field_454': 11, 'field_455': '-----'}, 
    {'field_454': 12, 'field_455': '-----'}
    ], 
'entity_id': 42,
'username': 'admin', 
'key': 'apikey, 
'password': 'admin', 
'action': 'insert'
}

Код: Выделить всё

200 b'{"status":"error","error_code":"","error_message":"items is not array"}'

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 14:44
support
Полагаю что должно быть так

Код: Выделить всё

'items': [
    ['field_454': 1, 'field_455': '-----'],

Re: Запись полей через REST API

Добавлено: 18 апр 2019, 15:23
mamol27
support писал(а): 18 апр 2019, 14:44 Полагаю что должно быть так

Код: Выделить всё

'items': [
    ['field_454': 1, 'field_455': '-----'],
Такое, к сожалению, невозможно, в квадратных скобках массив, в кудрявых словарь(dictionary, map). То есть формат поле:значение возможен только в словаре