Запрашивает пакет и API документацию - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблемы с пониманием того, где добавить параметры, определенные в документации API.Взять, к примеру, документацию BeeBole , в которой указано, что для получения отсутствия по идентификатору требуется следующий запрос:

    {
"service": "absence.get",
"id": "absence_id"
}

В документации предоставляется только один URL-адрес:

BeeBole принимает запросы HTTP POST в формате json-doc по следующему URL: https://beebole -apps.com / api / v2

Как быэто будет реализовано в контексте запросов Python?Следующий код, который я пробовал, возвращает 404:

import requests

payload = {
    "service": "absence.get",
    "id": "absence_id"
}

auth = {
    "username": "API_token",
    "password": "x"
}

url = "https://beebole-apps.com/api/v2"

req = requests.get(url, params=payload, auth=auth).json()

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Из документации сайта видно, что этот конкретный поставщик выбрал необычный API.Большинство людей используют разные конечные точки для реализации разных операций, но BeeBole, по-видимому, реализует все из одной конечной точки, а затем выбирает операцию, проверяя клавишу "service" в данных запроса.

Try

response - request.post('https://beebole-apps.com/api/v2',
                        json={"service": "company.list"},
                        headers={"authorization": TOKEN)

Из документации я не могу гарантировать, что запрос будет помещен в правильном формате, но, по крайней мере, если он не работает, он должен дать вам некоторое представление о том, как поступить.Установка правильного значения TOKEN описана в разделе «Авторизация» в документации BeeBole.

Это необычный способ предложить API, но он кажется работоспособным.

0 голосов
/ 27 сентября 2018

BeeBole принимает запросы HTTP POST в формате json-doc на следующий URL: https://beebole -apps.com / api / v2

Формат документа JSON - это та часть, которую вы пропустили;вам нужно передать информацию в виде тела запроса в кодировке JSON.Используемый вами аргумент params устанавливает только строку запроса URL (часть ?... в URL).

Использование

import requests

payload = {
    "service": "absence.get",
    "id": "absence_id"
}

auth = ("API_token", "x")    
url = "https://beebole-apps.com/api/v2"

req = requests.get(url, json=payload, auth=auth).json()

Часть json= гарантирует, что payload словарь кодируется в JSON и отправляется как тело POST.Это также устанавливает заголовок Content-Type запроса.

Я также обновил API-аутентификацию , все, что здесь нужно для ключевого слова auth, это кортеж имени пользователя и пароля,См. Basic Authentication раздел .

. Вы можете подождать с вызовом .json() в ответе;сначала проверьте, был ли ответ успешным:

req = requests.get(url, json=payload, auth=auth)
if not req.ok:
    print('Request not OK, status:', req.status_code, req.reason)
    if req.content:
        print(req.text)
else:
    data = req.json()
    if data['status'] == 'error':
        print('Request error:', data['message'])

При этом используются документированные ответы об ошибках .

...