要求包装和API文档

时间:2018-09-27 14:44:55

标签: python api python-requests documentation

我无法理解在何处添加API文档定义的参数。以BeeBole的documentation为例,它指定要通过ID缺席,需要以下请求:

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

它们在文档中仅提供一个URL:

  

BeeBole正在接受json-doc格式的HTTP POST请求到以下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 :(得分:1)

  

BeeBole正在接受json-doc格式的HTTP POST请求到以下URL:https://beebole-apps.com/api/v2

这里缺少JSON文档格式;您需要将信息作为JSON编码的请求的 body 进行传递。您使用的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 authentication,这里auth关键字所需要的只是用户名和密码的元组。参见Basic Authentication section

您可能要等待响应中的调用.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'])

这使用了documented error responses

答案 1 :(得分:0)

从站点文档看来,该特定供应商选择了一种不同寻常的API。大多数人使用不同的终结点来实现不同的操作,但是BeeBole似乎实现了一个终结点之外的所有功能,然后通过检查请求数据中的"service"键来选择操作。

尝试

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

从文档中,我不能保证将请求以正确的格式放置,但是至少如果它不起作用,它应该为您提供一些有关如何进行处理的线索。 BeeBole文档中的“授权”下介绍了建立正确的TOKEN值。

这是提供API的一种不寻常的方式,但似乎可行。