【问题标题】:Filtering or Ordering API request in query parameter在查询参数中过滤或排序 API 请求
【发布时间】:2020-10-15 01:29:13
【问题描述】:

我正在使用 python 向 RESTful API 发出获取请求。使用以下格式与 API 交互没有问题:

activities = requests.get("url/activities",headers=headers).json()

根据 API 文档,我应该能够通过“使用 url 中设置的查询参数发送请求”来排序和/或过滤请求。这些是给出的例子:

/activities?q={"name": "Test"}
or
/activities?order={"field": "asc"}

但是,当我以以下格式提出请求时:

activities = requests.get("url/activities?q={'name': 'Test'}",headers=headers).json()

or

activities = requests.get("url/activities?order={'field': 'asc'}",headers=headers).json()

print(activities)

我明白了:

{'type': 'Invalid Request error', 'code': 400, 'message': 'Search query must be json'}
or
{'type': 'Invalid Request error', 'code': 400, 'message': 'Order must be json'}

我不确定我需要做什么才能进行查询或订购 json。我在 API 文档中找不到任何其他建议以其他方式提出请求的内容。我在这里错过了什么?

【问题讨论】:

    标签: python json api get request


    【解决方案1】:

    问题出在这里:

    "url/activities?q={'name': 'Test'}"
    

    {'name': 'Test'} 不是有效的 JSON。 JSON 只识别双引号。

    与其他查询类似。

    【讨论】:

    • @AfredTX 很高兴听到它有帮助。如果我的回答解决了您的问题,请不要忘记将我的回答标记为解决方案(单击白色复选标记将其变为绿色)。这是 StackOverflow/StackExchange 成员的预期行为。
    【解决方案2】:

    关于你的演讲:

    activities = requests.get("url/activities?q{'name':'Test'}",headers=headers).json()
    
    or
    
    activities=requests.get("url/activitiesorder{'field':'asc'}",headers=headers).json()
    

    URL 不能像 "url/activitiesorder{'field':'asc'}" 那样现在 url 应该变成纯 url,如果你想添加一些额外的参数,你可以这样做:

    import requests
    
    url = "https://website.com/activities"
    headers = {'name':'test'}
    
    activities = requests.get(url, headers).json()
    
    print(activities)
    

    了解更多:

    https://requests.readthedocs.io/en/master/user/quickstart/

    【讨论】:

    • 这是 API 文档中指定的内容。是的,这是一种不好的做法,但 OP 可能无法改变这一点,并且必须与 API 实现者指定的方式有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-10-04
    • 2014-02-06
    • 1970-01-01
    • 2016-11-07
    • 2019-11-07
    相关资源
    最近更新 更多