Python调用API的常用方式解析

 更新时间:2025年05月09日 11:10:10   作者:看海的四叔  
在数据开发中,调用API是连接外部服务、获取数据或实现系统集成的核心方式之一,最近由于阿里云ODPS安全限制问题,处理了一批API调用的任务,所以从原理、案例和优缺点等维度,写一写python调用API的常用方式介绍,需要的朋友可以参考下

一、引言

在数据开发中,调用API是连接外部服务、获取数据或实现系统集成的核心方式之一。
最近由于阿里云ODPS安全限制问题,处理了一批API调用的任务,所以从原理、案例和优缺点等维度,写一写python调用API的常用方式介绍。

二、常用方式介绍

Python调用API的主要方法可分为以下四类,每种方式的特点和适用场景有些许差异:

方法原理适用场景
requests基于HTTP的第三方库,封装GET/POST等请求方法,提供简洁的API调用接口。常规HTTP请求、快速开发、数据交互
http.clientPython内置HTTP库,需手动构建请求头和报文,精细控制请求的场景。低层级操作、兼容性要求高
urllib标准库模块,包含urllib.request等子模块,基础核心。简单请求、无需依赖第三方库的场景
aiohttp基于异步IO的HTTP库,通过协程实现非阻塞请求,适用高并发场景。异步编程、高并发API调用

三、实现与案例

1.requests

  • 原理​:通过封装HTTP请求方法,简化参数传递和响应处理,自动处理URL编码、连接池管理和响应解析,支持JSON解析、Session会话、文件上传等功能。
  • 优点​:代码简洁、功能全面
  • 缺点​:请求IO密集型场景效率较低
import requests

def get_github_user(username):
    """
    使用requests库调用GitHub API获取用户信息
    """
    # 构造API请求
    url = f"https://api.github.com/users/{username}"
    
    try:
        # 发送GET请求(自动处理连接和关闭)
        response = requests.get(url, timeout=5)
        
        # 检查HTTP状态码
        if response.status_code == 200:
            # 解析JSON响应数据
            user_data = response.json()
            return {
                "name": user_data.get("name"),
                "location": user_data.get("location"),
                "public_repos": user_data.get("public_repos")
            }
        else:
            print(f"请求失败,状态码:{response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"请求异常:{str(e)}")

# 调用示例
if __name__ == "__main__":
    print(get_github_user("octocat"))  # GitHub官方测试账号

2.http.client

  • 原理​:内置的底层HTTP客户端库,手动管理连接生命周期和报文头构造,适合需要精细控制HTTP协议的场景
  • 优点​:直接可用、细粒度控制
  • 缺点​:代码冗长、需手动处理编码和连接
import http.client
import json

def get_httpbin_data():
    """
    使用http.client获取httpbin测试数据
    """
    # 创建对象
    conn = http.client.HTTPSConnection("httpbin.org")
    try:
        # 发送GET请求
        conn.request("GET", "/get")
        # 获取响应对象
        response = conn.getresponse()
        # 读取响应体并解码
        data = response.read().decode('utf-8')
        # 解析JSON数据
        return json.loads(data)
    except Exception as e:
        print(f"请求异常:{str(e)}")
    finally:
        # 必须手动关闭连接
        conn.close()

# 调用示例
if __name__ == "__main__":
    print(get_httpbin_data())
    

3.urllib(轻量级方案)

  • 原理​:复合型HTTP工具,集成request/error/parse等模块,适合简单请求和无需依赖的环境
  • 优点​:轻量级
  • 缺点​:接口设计分散、缺少高级功能
from urllib.request import urlopen
import json

def get_user_agent():
    """
    使用urllib获取客户端UA信息
    """
    url = "http://httpbin.org/user-agent"
    try:
        # 打开连接,自动处理HTTP/HTTPS
        with urlopen(url, timeout=5) as response:
            # 读取并解析JSON数据
            return json.loads(response.read().decode())
    except Exception as e:
        print(f"请求异常:{str(e)}")

# 调用示例
if __name__ == "__main__":
    print(get_user_agent())
    

4.aiohttp(异步方案)

  • 原理​:基于asyncio的异步HTTP客户端,使用协程实现非阻塞IO操作,适合高并发场景(如爬虫、实时系统)
  • 优点​:高吞吐量、资源利用率高
  • 缺点​:需要异步编程知识、调试复杂度高
import aiohttp
import asyncio

async def fetch_concurrent_data():
    """
    使用aiohttp并发获取多个API数据
    """
    urls = [
        "https://jsonplaceholder.typicode.com/posts/1",
        "https://jsonplaceholder.typicode.com/comments/1"
    ]
    
    # 创建共享会话(自动管理连接池)
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            # 创建并发任务
            task = asyncio.create_task(
                session.get(url, timeout=aiohttp.ClientTimeout(total=3))
            )
            tasks.append(task)
        
        # 等待所有任务完成
        responses = await asyncio.gather(*tasks)
        
        results = []
        for response in responses:
            # 检查响应状态
            if response.status == 200:
                data = await response.json()
                results.append(data)
        return results

# 调用示例
if __name__ == "__main__":
    print(asyncio.run(fetch_concurrent_data()))

四、总结对比

方法适用场景性能表现难度
requests常规REST API调用★★★★☆简单
http.client底层协议控制★★☆☆☆中等
urllib简单请求/无依赖环境★★★☆☆简单
aiohttp高并发/异步任务★★★★★复杂

到此这篇关于Python调用API的常用方式解析的文章就介绍到这了,更多相关Python调用API方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python的pdb调试命令的命令整理及实例

    python的pdb调试命令的命令整理及实例

    这篇文章主要介绍了python的pdb调试命令的命令整理及实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • python光学仿真面向对象光学元件类的实现

    python光学仿真面向对象光学元件类的实现

    这篇文章主要为大家介绍了python光学仿真面向对象光学元件类的实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • Python制作动态字符画的源码

    Python制作动态字符画的源码

    python字符画是一个简单有趣的图画,它一般由程序制作而成,接下来通过本文给大家分享Python制作动态字符画的源码,需要的朋友可以参考下
    2021-08-08
  • Python 如何将integer转化为罗马数(3999以内)

    Python 如何将integer转化为罗马数(3999以内)

    这篇文章主要介绍了Python 将integer转化为罗马数(3999以内)的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • django框架基于queryset和双下划线的跨表查询操作详解

    django框架基于queryset和双下划线的跨表查询操作详解

    这篇文章主要介绍了django框架基于queryset和双下划线的跨表查询操作,结合实例形式详细分析了Django框架queryset和双下划线的跨表查询相关实现技巧与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Python读写csv文件流程及异常解决

    Python读写csv文件流程及异常解决

    这篇文章主要介绍了Python读写csv文件流程及异常解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 使用Python实现微信提醒备忘录功能

    使用Python实现微信提醒备忘录功能

    最近工作比较繁杂,经常忘事,有时候记了备忘录结果却忘记看备忘录,但是微信是每天都会看的,于是就想到写 一个基于微信的提醒系统。这篇文章主要介绍了使用Python实现微信提醒备忘录功能,需要的朋友可以参考下
    2018-12-12
  • 使用pytorch进行图像的顺序读取方法

    使用pytorch进行图像的顺序读取方法

    今天小编就为大家分享一篇使用pytorch进行图像的顺序读取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python计算数字或者数组的阶乘的实现

    python计算数字或者数组的阶乘的实现

    本文主要介绍了python计算数字或者数组的阶乘,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python中实现常量(Const)功能

    Python中实现常量(Const)功能

    这篇文章主要介绍了Python中实现常量(Const)功能,python语言本身没有提供const,本文使用一个类来实现常量定义功能,并介绍了使用方法,需要的朋友可以参考下
    2015-01-01

最新评论