使用Python调用REST API的简易指南

如果正在寻找如何使用Python调用REST API的指导,那么来对地方了。本文将以一种非常简单的方式介绍REST API与Python的结合使用。

什么是API?

API是“应用程序编程接口”(Application Programming Interface)的缩写。API充当一种接口,使得一个应用程序能够将其数据提供给第三方应用程序使用。

API最常见的用途是从远程网站检索数据,通过发出请求来实现,这种请求在互联网上无处不在。每天看到的最常见的API使用场景是“使用Facebook/Twitter/Google/Github登录”。应用程序不是直接登录用户的社交媒体账户,而是使用API来验证用户身份。

什么是REST架构?

REST代表“表现层状态转移”(Representational state transfer),它是API用于网络服务的一种软件架构风格。REST由一组约束组成,旨在简化客户端/服务器通信的软件架构。

REST架构的一些约束如下:

  • 无状态(Stateless):服务器不会保留来自客户端的任何请求数据。会话状态仅存储在客户端。
  • 客户端-服务器(Client-server):客户端负责用户界面,服务器负责后端和数据存储,二者必须相互独立。
  • 可缓存(Cacheable):从服务器检索的数据必须是可缓存的,可以由客户端或服务器进行缓存。
  • 统一接口(Uniform interface):服务器应该提供统一的接口来访问资源,而不需要定义它们的表示。
  • 分层系统(Layered system):客户端可能通过其他层(如代理或负载均衡器)间接访问服务器上的资源。

更多信息,请查看。

REST API

已经讨论了API用于从远程网站检索数据。但问题是,如何向远程Web服务器发出请求并检索数据呢?这是通过使用URL端点来完成的,API就是从这里提供的,每个URL被称为HTTP请求,返回的数据被称为响应。

HTTP请求由以下部分组成:

  • 端点(Endpoint):指示正在与之交互的数据的URL。根端点是API的起点,用户从这里开始请求。例如,https://www.university.com/students,/students是端点,https://www.university.com/是起始URL。
  • 方法(Method):REST API提供方法以实现创建、读取、更新和删除功能。REST API使用的方法如下:
    • GET - 检索数据
    • PUT - 替换数据
    • POST - 创建数据
    • DELETE - 删除数据

对于每个请求,将从API收到一个响应。例如,终端上的curl命令可以用来向Open Notify API发出GET请求,该API提供有关当前在太空中的宇航员的信息:

curl -X GET "http://api.open-notify.org/astros.json"

在上面的例子中,可以看到以JSON格式返回的响应,它提供了有关这些宇航员的数据。

如何使用PythonRequests与REST API交互

现在,让了解如何使用Python Requests与REST API集成。首先,确保主机机器上安装了Python和pip。(本教程使用的是Linux),然后按照下面给出的步骤操作:

pip install requests

现在可以开始使用Python Requests与REST API交互了,应该将Requests库导入到想要使用的Python脚本中:

import requests

GET方法用于从REST API检索感兴趣的任何资源的数据。这里,将使用https://randomfox.ca/,它每次都会提供一张小狐狸的随机图片。

从网站复制API,需要创建一个对象或变量,用来存储从上述网站的服务器收到的所有内容,包括头部和数据有效载荷,以响应GET请求。

response = requests.get("https://randomfox.ca/floof") print(response.status_code)

可以从对象中访问很多东西,其中print(response.status_code)这行代码将在进行HTTP请求时返回状态码,它将告诉请求的结果如何。默认是200或“Ok”,这意味着响应很好,返回的所有信息都是正确的。

其他HTTP代码表如下:

现在,将使用JSON函数,它是请求的一部分。所有或大多数API使用一种叫做JSON的语言(看起来有点像Python字典),这是一种与API通信的标准,信息格式与网站上给出的格式相同:

请求的内容可以通过几种方式访问,例如:

  • response.content() # 返回数据有效载荷的原始字节
  • response.text() # 返回数据有效载荷的字符串表示形式,由于它是字符串,不能提取任何数据
  • response.json() # 当API返回JSON时非常方便

如果使用response.content(),将以原始格式获得数据,输出将如下所示:

response.text()

如果使用这个,数据将以字符串格式呈现,输出将如下所示:

response.json()

所以为了得到想要的,即随机狐狸图片,必须使用JSON函数。必须将print(response.status_code)(来自步骤2)替换为print(response.text()),最终代码将如下所示:

import requests response = requests.get("https://randomfox.ca/floof") print(response.json())

将得到以下输出:

点击链接,将被重定向到一个随机的狐狸图片,如下所示:

替代方式/另一种方法

当打印JSON时,实际上是在处理一个字典。所以可以创建一个新的变量(fox_img)并将其设置为response.json()。这个response.json()将获取字典并将其放入新变量(fox_img)中,从那里现在可以提取任何数据并打印出来。

例如,有两个键“image”和“link”,可以使用它们来修改代码,如下所示:

由于使用了image键,API将查找字典中的image键并打印其值。

import requests response = requests.get("https://randomfox.ca/floof") fox_img = response.json() print(fox_img['image'])

所以,只得到了一个字符串,它链接到图片,而不是整个字典。

在这里,使用了link键,所以API现在将查找字典中的link键并打印其值。

import requests response = requests.get("https://randomfox.ca/floof") fox_img = response.json() print(fox_img['link'])
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485