所有文章 > API开发 > 如何发起API请求(使用cURL)
如何发起API请求(使用cURL)

如何发起API请求(使用cURL)

阅读并练习本文后,您将了解如何使用 cURL 执行带有 GET 方法的 API 调用。您将知道何时使用 cURL 而不是 Postman 来测试 API。

在阅读和练习本文之前,请确保你已经阅读并练习了我的第 1 部分文章: 如何使用 Postman 发出基本的 API 请求

什么是 cURL?

cURL 是一个可以在大多数命令行界面 (CLI)(如 Windows 命令提示符、Windows Powershell、MacOS 终端、Linux 终端)上调用 API 的命令。它是 Windows 和 MacOS 上的默认命令,但您可能需要安装其他软件包才能在 Linux 终端上使用。这意味着您可以使用 cURL 作为 Postman 的替代品来测试 API。

为什么使用 cURL 而不是 Postman?

由于以下原因,您可能希望使用 cURL 而不是 Postman:

  • cURL 可以在无法访问 Postman 的环境中测试 API 调用。
  • 其中一种情况是远程 Linux 实例。您可能在云资源(AWS EC2、GCE VM、Azure VM 等)上有一个 VM,并且您想检查 VM 是否可以成功调用 API。cURL 是测试这一点最方便的工具。
  • API 文档通常有使用 cURL 调用 API 的示例代码,但没有 Postman(即 Shopify API )。
  • 您可以从文档中复制示例 cURL 代码并立即运行。文档中很少有 Postman 示例。这意味着使用 cURL,您将能够使用提供的示例快速测试 API。
  • cURL 可以从您的本地机器测试 API 调用。
  • Postman 默认从其云服务器进行 API 调用。
  • 您可能会遇到这样的情况:您可以在 Postman 上成功调用 API,但在本地计算机上从脚本调用 API 时会失败。在这种情况下,您可能需要使用其他工具直接从本地计算机进行 API 调用。cURL 是一款出色的工具。
  • 请注意,Postman 也可以从您的本地计算机而不是其云服务器进行 API 调用,但您必须先在本地安装 Postman 代理才能执行此操作。

演示:如何使用 cURL 调用 API

本文将使用 Poke API(一种公共 REST API)进行演示。Poke API 用于与公共 Pokemon 数据库进行交互。我使用 Pokemon 资源(什么是资源?请参阅后面的解释)。Poke API 文档在此处: 文档 — PokéAPI

API 文档的结构: 请熟悉如何阅读第 1 部分文章的 3.1 节中的 API 文档。那里提供了有关 PokeAPI 文档的一个例子。

1)API请求工具

要使用 API,我们需要一个工具来发出 API 请求。最流行的工具是:

  • Postman:一款主要用于测试 API 请求的 Web 应用/桌面应用。第 1 部分演示了如何使用 Postman
  • CURL:一个命令行工具
  • 一种编程语言(例如 Python)

我将在本演示中使用 cURL。请打开您的 OS 终端以使用 cURL

  • Windows:使用命令提示符 (cmd) 或 Powershell。本文使用 Windows 的 cmd
  • MacOS:使用终端
  • Linux:使用终端

通过在 OS 终端中输入并按 Enter 来测试 cURL 是否已安装在您的机器上 curl --version 。输出将显示当前安装的 cURL 版本,如下所示(以下是 Linux 上的 cURL)。

curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3 Release-Date: 2020-01-08 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

2)检测发出 API 请求所需的输入

要发出 API 请求,您至少需要 3 个输入:

  • 端点:数据表的 URL
  • 方法:与端点使用的交互方法
  • 授权:针对API系统的授权方式。

当您查看 Pokemon 表 时,您将看到有关端点和方法的以下信息:

在图片中,你可以看到方法是 GET 。端点是 https://pokeapi.co/api/v2/pokemon

后一部分 {id or name} ,称为路径参数。路径参数可以是必需的,也可以是可选的。对于 Poke API,它是可选的。你怎么知道的?它在 资源列表/分页部分 中提到。(调用任何没有资源 ID 或名称的 API 端点将…)

我们需要的最后一个输入是授权。像这样的公共 API 意味着任何人都可以在未经授权的情况下使用它。因此授权方法是 No Auth。

总而言之,以下是我们将用来从 Pokemon 表中获取数据的输入:

您可以在第 1 部分文章的术语部分中看到更多类型的授权。

3)将输入导入 cURL

让我们根据上面的输入构建 cURL 命令

  • cURL 命令结构: curl [OPTIONS] [URL]
  • 端点进入 [URL] 部分。所以我们有 curl https://pokeapi.co/api/v2/pokemon
  • 要指定 API 方法,我们使用选项 -X (简称 ) --request ,并在其后加上 GET。所以我们有 curl -X GET https://pokeapi.co/api/v2/pokemon
  • 如果授权方法是 No Auth ,则您不必在命令中提供其他信息

所以我们的最终命令是 curl -X GET https://pokeapi.co/api/v2/pokemon 。让我们将其输入到我们的 OS 终端并按 Enter 键查看输出。这是我在 Linux 和 Windows 机器上的成功输出(我对其进行了一些格式化以使其看起来更漂亮)。

{ "count":1281, "next":"https://pokeapi.co/api/v2/pokemon?offset=20&limit=20", "previous":null, "results":[ { "name":"bulbasaur", "url":"https://pokeapi.co/api/v2/pokemon/1/" }, { "name":"ivysaur", "url":"https://pokeapi.co/api/v2/pokemon/2/" }, { "name":"venusaur", "url":"https://pokeapi.co/api/v2/pokemon/3/" }, { "name":"charmander", "url":"https://pokeapi.co/api/v2/pokemon/4/" }, { "name":"charmeleon", "url":"https://pokeapi.co/api/v2/pokemon/5/" }, { "name":"charizard", "url":"https://pokeapi.co/api/v2/pokemon/6/" }, { "name":"squirtle", "url":"https://pokeapi.co/api/v2/pokemon/7/" }, { "name":"wartortle", "url":"https://pokeapi.co/api/v2/pokemon/8/" }, { "name":"blastoise", "url":"https://pokeapi.co/api/v2/pokemon/9/" }, { "name":"caterpie", "url":"https://pokeapi.co/api/v2/pokemon/10/" }, { "name":"metapod", "url":"https://pokeapi.co/api/v2/pokemon/11/" }, { "name":"butterfree", "url":"https://pokeapi.co/api/v2/pokemon/12/" }, { "name":"weedle", "url":"https://pokeapi.co/api/v2/pokemon/13/" }, { "name":"kakuna", "url":"https://pokeapi.co/api/v2/pokemon/14/" }, { "name":"beedrill", "url":"https://pokeapi.co/api/v2/pokemon/15/" }, { "name":"pidgey", "url":"https://pokeapi.co/api/v2/pokemon/16/" }, { "name":"pidgeotto", "url":"https://pokeapi.co/api/v2/pokemon/17/" }, { "name":"pidgeot", "url":"https://pokeapi.co/api/v2/pokemon/18/" }, { "name":"rattata", "url":"https://pokeapi.co/api/v2/pokemon/19/" }, { "name":"raticate", "url":"https://pokeapi.co/api/v2/pokemon/20/" } ] }

注意:cURL 的默认 API 调用方法已经是 GET,因此您实际上不必提供 -X GET选项部分。因此该命令可以缩写为: curl https://pokeapi.co/api/v2/pokemon。但是记住此选项很有用,因为您将来可能想要使用 POST 方法,因此下面的命令仍将保留该 -X GET选项。

恭喜,您刚刚使用 cURL 对 PokeAPI 进行了 API 调用!

4)高级——路径参数

路径参数定义在 3.2.2 节中提到。路径参数通常用于获取单个对象的详细信息。

例如,您想要获取有关特定 Pokemon(如 Pikachu)的详细信息。您可以使用“pikachu”作为路径参数并插入到端点中。

要查看有关皮卡丘的具体详细信息,我们的 API 请求的输入是:

让我们在 cURL 中编辑端点。cURL 命令现在如下所示:

curl -X GET https://pokeapi.co/api/v2/pokemon/pikachu

让我们复制它,输入到我们的 OS 终端并按回车键进行 API 调用。

输出内容很长,所以我就不放在这里了。它包含有关皮卡丘的能力和许多其他内容的详细信息。

如您所见,更改路径参数就像编辑 API 端点一样简单。

5)高级——查询参数

API 可以提供一种方法来过滤、排序和限制返回的数据。该方法通常是通过查询参数来实现的。有些文档将查询参数仅称为参数。因此,很容易将查询参数与路径参数混淆。

对于 Poke API,只有几个查询参数。其中一个允许 API 请求限制返回的记录数。它在 资源列表/分页部分 中描述。

根据描述,您可以添加一个名为“limit”的查询参数和我们想要的记录数,API 将仅返回指定数量的记录。 例如,您想获取 Pokemon 表上的前 2 个 pokemon。那么我们的 API 请求的输入将是:

好的,这部分有点棘手,所以请耐心等待。

  • 查询参数作为 URL 端点的一部分插入。因此您仍将在此处编辑端点,与路径参数没有区别。问题是,我们如何编辑它。
  • 查询参数与端点之间用问号(“?”)隔开
  • 问号后,我们输入查询参数名称,后跟等号(“=”),后跟查询参数值。在本例中: limit=2
  • 结合起来,我们现在有了新的端点: https://pokeapi.co/api/v2/pokemon?limit=2
  • 最后一个命令是 curl -X GET https://pokeapi.co/api/v2/pokemon?limit=2 。让我们运行它。以下是输出

{ "count":1281, "next":"https://pokeapi.co/api/v2/pokemon?offset=2&limit=2", "previous":null, "results":[ { "name":"bulbasaur", "url":"https://pokeapi.co/api/v2/pokemon/1/" }, { "name":"ivysaur", "url":"https://pokeapi.co/api/v2/pokemon/2/" } ] }

如果您不使用查询参数,返回的数据将仅显示 2 个神奇宝贝,而不是 20 个。您已成功限制返回的数据。

注意:如果您有多个查询参数,则可以附加下一个参数并用与号(“&”)分隔它们。即 https://pokeapi.co/api/v2/pokemon?offset=2&limit=2

原文链接:https://medium.com/refined-and-refactored/how-to-make-basic-api-requests-part-2-using-curl-cf3aa0b37c78

#你可能也喜欢这些API文章!