使用curl发出REST API请求

时间:2020-03-05 15:26:28  来源:igfitidea点击:

应用程序接口(API)是允许软件程序相互通信的一组定义和协议。

术语REST代表代表性的状态转移。
它是一种架构样式,由创建Web服务时要使用的一组约束组成。

RESTful API是遵循REST体系结构的API。
通常,REST API使用HTTP协议来发送和检索数据以及JSON格式的响应。
我们可以使用标准的HTTP方法通过API创建,查看,更新或者删除资源。

要测试RESTful API并与之交互,可以使用任何可以发出HTTP请求的库或者工具。

API请求由四个不同部分组成:

  • 端点。这是客户端用于与服务器通信的URL。
  • HTTP方法。它告诉服务器客户端要执行什么操作。最常见的方法是“ GET”,“ POST”,“ PUT”,“ DELETE”和“ PATCH”
  • 标头。用于在服务器和客户端之间传递其他信息,例如授权。
  • 身体。数据发送到服务器。

在本文中,我们将讨论如何使用“ curl”与RESTful API进行交互。
“ curl”是用于从远程服务器传输数据或者向远程服务器传输数据的命令行实用程序。
默认情况下,它已安装在macOS和大多数Linux发行版上。

curl选项

“ curl”命令的语法如下:

curl [options] [URL...]

在提出请求时,我们将使用以下选项:

  • '-X','-request'-要使用的HTTP方法。
  • '-i','-include'-包括响应头。
  • '-d','--data'-要发送的数据。
  • '-H','--header'-要发送的添加标题。

HTTP GET

GET方法从服务器请求特定资源。

使用'curl'发出HTTP请求时,GET是默认方法。
下面是向所有帖子的JSON表示形式向JSONPlaceholder API发出GET请求的示例:

curl https://jsonplaceholder.typicode.com/posts

要过滤结果,请使用查询参数:

curl https://jsonplaceholder.typicode.com/posts?userId=1

HTTP POST

POST方法用于在服务器上创建资源。
如果资源存在,则将其覆盖。

以下命令使用'-d'选项指定的数据发出POST请求:

curl -X POST -d "userId=5&title=Hello World&body=Post body." https://jsonplaceholder.typicode.com/posts

使用“ Content-Type”标头指定请求正文的类型。
默认情况下,如果未指定此标头,则“ curl”使用“ Content-Type:application/x-www-form-urlencoded”。

要发送JSON格式的数据,请将主体类型设置为'application/json':

curl -X POST -H "Content-Type: application/json" \    -d '{"userId": 5, "title": "Hello World", "body": "Post body."}' \    https://jsonplaceholder.typicode.com/posts

HTTP PUT

PUT方法用于更新或者替换服务器上的资源。
它将指定资源的所有数据替换为请求数据。

curl -X PUT -d "userId=5&title=Hello World&body=Post body." https://jsonplaceholder.typicode.com/posts/5

HTTP PATCH

PATCH方法用于对服务器上的资源进行部分更新。

curl -X PUT -d "title=Hello Universe" https://jsonplaceholder.typicode.com/posts/5

HTTP DELETE

DELETE方法从服务器中删除指定的资源。

curl -X DELETE https://jsonplaceholder.typicode.com/posts/5

验证

如果API端点需要身份验证,则需要获取访问密钥。
否则,API服务器将使用“禁止访问”或者“未授权”响应消息进行响应。

获取访问密钥的过程取决于我们使用的API。
获得访问令牌后,可以在标头中发送它:

curl -X GET -H "Authorization: Bearer {ACCESS_TOKEN}" "https://api.server.io/posts"