跳到内容

Python 和 API:如何使用 Python 请求构建 API 驱动的应用程序

你好呀!您是否希望提高您的 Python 技能并学习如何将强大的 API 集成到您的应用程序中?那么本指南适合您。

我将引导您使用出色的 Python Requests 库与各种 Web API 进行交互。凭借一些基本的 Python 知识和请求,您将能够:

  • 从任何 API 端点查询数据
  • 构建与 Twitter、Stripe、Twilio 等流行服务集成的应用程序。
  • 通过将 API 连接在一起实现工作流程自动化
  • 解锁大量有用的数据和功能来增强您的 Python 应用程序

听起来很令人兴奋吧?让我们深入了解吧!

为什么在 Python 中使用 API?

在进入代码之前,我们先来了解一下 为什么 连接到 API 对于开发人员来说非常有用。

API 允许不同的软件应用程序相互通信。公司和组织公开 API,让开发人员更轻松地使用其服务构建应用程序。

以下是在代码中使用 API 的一些主要原因:

  • 节省时间 – 不要从头开始重建已经作为 API 存在的东西!
  • 利用数据 – 访问天气、股票、社交媒体等有用的数据源。
  • 扩展功能 – 集成地图、支付、通知等。
  • 自动化工作流程 – 将不同的系统无缝连接在一起。
  • 更快地构建应用程序 – 专注于您的应用程序逻辑而不是底层基础设施。

简而言之,精心设计的 API 可帮助您更快地开发更好的应用程序。

根据 Postman 的 2024 年 API 状况报告,公共 API 的采用正在迅速增长:

  • 72% 的组织使用公共 API 作为其核心业务的一部分。
  • 58% 本身拥有公共 API。
  • 从 650 年到 2020 年,响应者的 API 请求增长了 2021% 以上。

随着 API 在各个行业中变得越来越普遍,现在是提高使用 Python 连接 API 的技能的好时机。

Python 请求入门

Python 拥有出色的库,可以让 API 的使用变得简单。最受欢迎的是 要求.

Requests 允许您只需几行代码即可调用 API:

import requests

response = requests.get(‘https://api.data.gov/education‘)

与 Python 内置的低级替代方案相比 urllib 模块,请求可以为您节省大量时间和麻烦。

请求的一些主要功能:

  • 简单、优雅的API
  • 使 HTTP 请求变得极其简单
  • 内置 JSON 支持
  • 处理标头、参数、身份验证
  • 网络错误自动重试
  • 广泛的高级功能

要安装 Requests,只需运行:

pip install requests

然后 import requests 在您的代码中,您就可以开始进行 API 调用了!

让我们来看一些简单的例子。

发出 GET 请求

最常见的 API 调用是从端点检索数据的 GET 请求。

以下是如何使用 Requests 发出 GET 请求:

import requests 

response = requests.get(‘https://api.github.com/repos/requests/requests‘)

这将向 GitHub API 端点发送 GET 请求,以检索请求存储库上的数据。

我们得到一个 Response 包含状态代码、响应标头和数据的对象。

打印响应状态代码:

print(response.status_code)

>>> 200

状态代码 200 表示我们的请求成功。存在许多其他状态代码来指示错误或失败 - 我们稍后将介绍如何处理这些情况。

要访问响应数据,只需调用 .json():

data = response.json()

print(data[‘stargazers_count‘])

>>> 64245

数据会自动解析为 JSON。这使得 JSON API 的使用变得非常简单。

传递参数

对于许多 API,您需要传递参数来过滤数据、对结果进行分页等。

将参数作为字典传递给 params 参数:

params = {‘type‘: ‘owner‘, ‘sort‘: ‘updated‘}
response = requests.get(‘https://api.github.com/repos/kennethreitz/requests‘, 
                        params=params)

Requests 对参数进行编码并将它们添加到 URL 中。

也可以直接在 URL 中传递参数:

response = requests.get(‘https://api.github.com/repos/kennethreitz/requests?type=owner&sort=updated‘)

无论哪种方式都有效,但传递字典被认为更干净。

POST 请求

要在服务器上创建资源,您可以使用 POST 请求。

将要发布的数据作为字典传递给 json 参数:

data = {‘name‘: ‘John Smith‘, ‘email‘: ‘[email protected]‘}
response = requests.post(‘https://api.example.com/users‘, json=data)

这会将数据编码为 JSON 并将 POST 发送到 API 以创建新的用户资源。

对于 POST,您还应该验证返回的状态代码:

if response.status_code == 201:
  print(‘User created!‘)

201状态表示资源已在服务器上成功创建。

放置、修补、删除

除了 GET 和 POST 之外,其他常见的 HTTP 方法还有:

  • PUT – 更新现有资源
  • 补丁 – 资源的部分更新
  • 删除 – 删除资源

这些工作原理类似,只需调用相应的方法即可 requests:

# PUT - Update user
requests.put(‘https://api.example.com/users/123‘, json=updated_data) 

# PATCH - Partial update  
requests.patch(‘https://api.example.com/users/123‘, json=partial_data)

# DELETE - Delete user
requests.delete(‘https://api.example.com/users/123‘)

现在您知道如何使用所有常见的 HTTP 方法进行 API 调用!

处理 API 响应

在使用API​​时,您需要根据服务器返回的状态代码来处理响应数据。

API 使用标准 HTTP 状态代码来指示成功、错误或失败。一些常见的包括:

  • 200 – OK – 请求成功
  • 201 – 已创建 – 资源已成功创建
  • 400 – 错误请求 – 请求格式错误或丢失数据
  • 401 – 未经授权 – 需要身份验证
  • 403 – 禁止 – 您无权访问此资源
  • 404 – 未找到 – 资源不存在
  • 500 – 服务器错误 – 服务器遇到意外错误

您检查 Response 对象上的状态代码:

response = requests.get(‘https://api.example.com/items/123‘)

if response.status_code == 200:
  # Success!
elif response.status_code == 404:
  # Notify user item does not exist

为了简洁起见,我建议将所有请求调用包装在一个辅助函数中,例如:

def make_api_request(endpoint):
  response = requests.get(endpoint)

  response.raise_for_status()

  return response.json()

这使得代码更加简洁,并将错误处理集中在一处。

raise_for_status() 如果有像 500 或 404 这样的 HTTP 错误代码,将会引发异常,这样您就不必每次都手动检查。

使用 API 进行身份验证

许多 API 需要身份验证来限制访问。 API 身份验证的一些常见形式包括:

  • API密钥 – 通过请求标头或参数传递唯一的 API 密钥
  • 基本认证 – 通过请求传递用户名和密码
  • 不记名代币 – 从身份验证提供商发送 OAuth 2.0 不记名令牌
  • 摘要验证 – 与基本身份验证类似,但凭证已加密

请求使处理身份验证变得简单。

要使用 API 密钥,请将其作为标头传递:

headers = {‘Authorization‘: ‘Bearer YOUR_API_KEY‘}
response = requests.get(‘https://api.example.com‘, headers=headers)

对于基本身份验证,请以元组形式提供用户名和密码:

requests.get(‘https://api.example.com‘, 
            auth=(‘username‘, ‘password‘))

请求将正确处理您的凭据编码。

对于来自 Facebook、Twitter、Google 等 OAuth 提供商的不记名令牌:

params = {‘access_token‘: ‘OAUTH_TOKEN‘}
requests.get(‘https://api.example.com‘, params=params)  

将访问令牌作为参数传递,请求将处理其余部分。

正确的身份验证对于安全访问 Python 应用程序和工作流程中的 API 至关重要。

使用 API 的最佳实践

现在你知道了 形成一种 要使用 Python 调用 API,我们来讨论一些有效使用它们的最佳实践:

优雅地处理错误

API 可能会以意想不到的方式失败——服务器宕机、网络中断、提供商做出更改。

发出 API 请求时:

  • 使用 try/ except 块 捕获错误
  • 处理常见异常,例如 ConnectionErrors
  • 检查状态代码并处理非 200 响应
  • 使用指数退避策略重试失败的请求

这可以确保您的应用程序在 API 失败时正常降级。

尊重率限制

为了防止滥用,API 对每小时/每天的请求实施速率限制。

超过这些限制将阻止您的访问,甚至可能永久阻止。

为了避免这种情况:

  • 查看速率限制文档 并了解您的配额
  • 限制请求 – 仅在必要时拨打电话
  • 实施退避计时器 如果您在重试之前达到暂停的限制
  • 切勿发送垃圾邮件或滥用 API! 这将导致阻塞。

速率限制保护 API,以便它们适用于所有用户。在使用时尊重它们。

缓存响应

API 可能会很慢,具体取决于连接情况。为了提高性能,请考虑缓存响应,尤其是在数据不经常更改的情况下。

流行的 Python 缓存库包括 Redis、Memcached 和 SQLAlchemy。

缓存可以避免重复请求的不必要的网络调用。

Python API 示例和用途

现在让我们看一些流行 API 的实际示例以及如何在 Python 中访问它们。

推特API

Twitter API 允许查询推文、用户、主题标签和分析。您需要申请 Twitter 开发者帐户才能获取 API 凭证。

安装 特威皮 更友好的 Twitter API 接口的库:

pip install tweepy

获取主题标签推文的示例:

import tweepy

client = tweepy.Client(bearer_token=TWITTER_TOKEN)

tweets = client.search_recent_tweets(query="#python")

for tweet in tweets.data:
   print(tweet.text)

查看 tweepy 文档 以获得更多细节。

GitHub API

GitHub API 允许以编程方式访问 GitHub 存储库、代码、用户等,无需身份验证。

获取用户存储库的示例:

import requests

response = requests.get(‘https://api.github.com/users/kennethreitz/repos‘)

for repo in response.json():
  print(repo[‘name‘]) 

查看 GitHub API 文档 了解更多用例。

条纹 API

Stripe API 允许将支付构建到应用程序和网站中。

安装 条纹 库和导入:

pip install stripe

import stripe

创建费用示例:

stripe.api_key = ‘STRIPE_SECRET_KEY‘ 

charge = stripe.Charge.create(
  amount=1000,
  currency=‘usd‘,
  source=‘tok_visa‘ # Token from Stripe.js
)

Stripe 会为您处理繁重的付款工作。

我们 Stripe 的 API 文档 获取完整的 API 参考。

还有大量其他出色的 API,例如 Slack、Twilio、Google 地图、AWS 等等!关键是为您的应用程序找到正确的数据源并利用 API 的强大功能。

结论

我希望本指南提供了有关使用 Requests 库在 Python 中发出 API 请求的有用概述。以下是一些要点:

  • 要求 使调用 API 变得简单 – 使用 pip 安装它
  • 使用常见的 HTTP 方法(如 GET、POST、PUT、DELETE)进行 CRUD 操作
  • 轻松传递参数、身份验证、标头和数据
  • 正确处理状态代码和错误
  • 实施速率限制和缓存等最佳实践
  • 集成 Twitter、GitHub、Stripe 等很酷的 API!

API 让您可以利用现有数据和服务,帮助您更快地构建更好的应用程序。 Python 和 Requests 提供了一种在代码中释放 API 威力的好方法。

对于后续步骤,我建议浏览官方 请求文档,阅读您想要集成的任何服务的 API 文档,并使用 Python API 查看一些存储库,例如 点击例子.

我希望本指南对您有所帮助!如果您对使用 Python 和 API 有任何其他问题,请告诉我。快乐编码!

加入谈话

您的电邮地址不会被公开。 必填带 *