如果 API 文档未发布,如何推断 API 调用应该是什么样子?

How can one infer what an API call should look like if the API documentation isn't published?

提问人:Hack-R 提问时间:10/8/2020 最后编辑:Hack-R 更新时间:10/8/2020 访问量:118

问:

我使用了一些 Web 应用程序,我想为它们开发代码。我在 GitHub 上看到其他人为一些相同的应用程序这样做。棘手的部分是这些服务没有已发布的 API 文档。如何推断 API 调用应该是什么样子?

不知何故,其他编码人员能够弄清楚 API 调用应该是什么样子,并编写代码以交互方式构建调用并将其提交到站点。

我想他们必须通过使用基于浏览器的开发工具(例如 Chrome 和 Firefox 中内置的工具)来分析网站来做到这一点,但当我尝试这样做时,它仍然不明显。虽然浏览器 例如,@castlelemongrab正在为 Parler.com 开发库/工具,尽管没有发布的 API。他的库构建了基于 URL 的调用,但是当我在浏览器中重复这些操作时,我从未看到显示的 URL 显示了我在应用程序中执行操作时需要构建的格式(例如:要发布帖子,他的查询使用格式)。由于我无法弄清楚他是如何确定该格式的,因此我也无法弄清楚如何为我想添加的缺失功能编写代码。parlancev1/post?id=xxxxxx

API Web 应用程序

评论


答:

1赞 user14335743 10/8/2020 #1

如果他正在编写代码来传递 URL 参数(似乎是这种情况),您需要在开发人员控制台中查看并“检查”请求。它为您提供了从 URL(和 URL 查询参数)到预期的标头和响应代码等的所有内容。您只需要准确地重新创建浏览器正在执行的操作即可。请务必注意 Content-Type...可能是 url 编码的表单数据,因为这不是“API”,而是网站/Web 应用程序。如果 POST 请求中有表单数据等,检查员还应该显示传递的确切参数。

例如。。。假设你想在程序中提交一些 HTML 来检查它是否有效。https://validator.w3.org/#validate_by_input

首先物理转到该 URL,然后尝试检查按下按钮时发送的请求。然后将其与以下代码进行比较:Check

>>> from requests import post
>>> html_str = """
... <!DOCTYPE html>
... <html>
... <body>
... 
... <h1>This is heading 1</h1>
... 
... </body>
... </html>"""
>>> 
>>> from requests import post
>>> 
>>> def html_validator(html_str):
...     p = {'fragment': html_str, 'content': 'submit'}
...     _ = [print(out) for out in post('https://validator.w3.org/check', files=p).text.split('<')]

... 
>>> 
>>> 
>>> html_validator(html_str)

您会发现它类似于进行 API 调用,但实际上您只是提交一个包含一些数据的表单(与用户按下按钮时在浏览器中执行的操作相同)。如果您不确定“片段”或“内容”来自哪里,也请检查 HTML 表单。它通常是 HTML id 或 name 属性。还要确保“检查”该检查按钮......您将看到一个名为“submit”的 ID 或名称。

你的请求检查器应该有所有的细节,只需用你的代码模仿它们:screenshot