欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python調(diào)用API的常用方式解析

 更新時(shí)間:2025年05月09日 11:10:10   作者:看海的四叔  
在數(shù)據(jù)開(kāi)發(fā)中,調(diào)用API是連接外部服務(wù)、獲取數(shù)據(jù)或?qū)崿F(xiàn)系統(tǒng)集成的核心方式之一,最近由于阿里云ODPS安全限制問(wèn)題,處理了一批API調(diào)用的任務(wù),所以從原理、案例和優(yōu)缺點(diǎn)等維度,寫(xiě)一寫(xiě)python調(diào)用API的常用方式介紹,需要的朋友可以參考下

一、引言

在數(shù)據(jù)開(kāi)發(fā)中,調(diào)用API是連接外部服務(wù)、獲取數(shù)據(jù)或?qū)崿F(xiàn)系統(tǒng)集成的核心方式之一。
最近由于阿里云ODPS安全限制問(wèn)題,處理了一批API調(diào)用的任務(wù),所以從原理、案例和優(yōu)缺點(diǎn)等維度,寫(xiě)一寫(xiě)python調(diào)用API的常用方式介紹。

二、常用方式介紹

Python調(diào)用API的主要方法可分為以下四類(lèi),每種方式的特點(diǎn)和適用場(chǎng)景有些許差異:

方法原理適用場(chǎng)景
requests基于HTTP的第三方庫(kù),封裝GET/POST等請(qǐng)求方法,提供簡(jiǎn)潔的API調(diào)用接口。常規(guī)HTTP請(qǐng)求、快速開(kāi)發(fā)、數(shù)據(jù)交互
http.clientPython內(nèi)置HTTP庫(kù),需手動(dòng)構(gòu)建請(qǐng)求頭和報(bào)文,精細(xì)控制請(qǐng)求的場(chǎng)景。低層級(jí)操作、兼容性要求高
urllib標(biāo)準(zhǔn)庫(kù)模塊,包含urllib.request等子模塊,基礎(chǔ)核心。簡(jiǎn)單請(qǐng)求、無(wú)需依賴第三方庫(kù)的場(chǎng)景
aiohttp基于異步IO的HTTP庫(kù),通過(guò)協(xié)程實(shí)現(xiàn)非阻塞請(qǐng)求,適用高并發(fā)場(chǎng)景。異步編程、高并發(fā)API調(diào)用

三、實(shí)現(xiàn)與案例

1.requests

  • ?原理?:通過(guò)封裝HTTP請(qǐng)求方法,簡(jiǎn)化參數(shù)傳遞和響應(yīng)處理,自動(dòng)處理URL編碼、連接池管理和響應(yīng)解析,支持JSON解析、Session會(huì)話、文件上傳等功能。
  • 優(yōu)點(diǎn)?:代碼簡(jiǎn)潔、功能全面
  • 缺點(diǎn)?:請(qǐng)求IO密集型場(chǎng)景效率較低
import requests

def get_github_user(username):
    """
    使用requests庫(kù)調(diào)用GitHub API獲取用戶信息
    """
    # 構(gòu)造API請(qǐng)求
    url = f"https://api.github.com/users/{username}"
    
    try:
        # 發(fā)送GET請(qǐng)求(自動(dòng)處理連接和關(guān)閉)
        response = requests.get(url, timeout=5)
        
        # 檢查HTTP狀態(tài)碼
        if response.status_code == 200:
            # 解析JSON響應(yīng)數(shù)據(jù)
            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"請(qǐng)求失敗,狀態(tài)碼:{response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求異常:{str(e)}")

# 調(diào)用示例
if __name__ == "__main__":
    print(get_github_user("octocat"))  # GitHub官方測(cè)試賬號(hào)

2.http.client

  • 原理?:內(nèi)置的底層HTTP客戶端庫(kù),手動(dòng)管理連接生命周期和報(bào)文頭構(gòu)造,適合需要精細(xì)控制HTTP協(xié)議的場(chǎng)景
  • 優(yōu)點(diǎn)?:直接可用、細(xì)粒度控制
  • 缺點(diǎn)?:代碼冗長(zhǎng)、需手動(dòng)處理編碼和連接
import http.client
import json

def get_httpbin_data():
    """
    使用http.client獲取httpbin測(cè)試數(shù)據(jù)
    """
    # 創(chuàng)建對(duì)象
    conn = http.client.HTTPSConnection("httpbin.org")
    try:
        # 發(fā)送GET請(qǐng)求
        conn.request("GET", "/get")
        # 獲取響應(yīng)對(duì)象
        response = conn.getresponse()
        # 讀取響應(yīng)體并解碼
        data = response.read().decode('utf-8')
        # 解析JSON數(shù)據(jù)
        return json.loads(data)
    except Exception as e:
        print(f"請(qǐng)求異常:{str(e)}")
    finally:
        # 必須手動(dòng)關(guān)閉連接
        conn.close()

# 調(diào)用示例
if __name__ == "__main__":
    print(get_httpbin_data())
    

3.urllib(輕量級(jí)方案)

  • 原理?:復(fù)合型HTTP工具,集成request/error/parse等模塊,適合簡(jiǎn)單請(qǐng)求和無(wú)需依賴的環(huán)境
  • 優(yōu)點(diǎn)?:輕量級(jí)
  • 缺點(diǎn)?:接口設(shè)計(jì)分散、缺少高級(jí)功能
from urllib.request import urlopen
import json

def get_user_agent():
    """
    使用urllib獲取客戶端UA信息
    """
    url = "http://httpbin.org/user-agent"
    try:
        # 打開(kāi)連接,自動(dòng)處理HTTP/HTTPS
        with urlopen(url, timeout=5) as response:
            # 讀取并解析JSON數(shù)據(jù)
            return json.loads(response.read().decode())
    except Exception as e:
        print(f"請(qǐng)求異常:{str(e)}")

# 調(diào)用示例
if __name__ == "__main__":
    print(get_user_agent())
    

4.aiohttp(異步方案)

  • 原理?:基于asyncio的異步HTTP客戶端,使用協(xié)程實(shí)現(xiàn)非阻塞IO操作,適合高并發(fā)場(chǎng)景(如爬蟲(chóng)、實(shí)時(shí)系統(tǒng))
  • ?優(yōu)點(diǎn)?:高吞吐量、資源利用率高
  • 缺點(diǎn)?:需要異步編程知識(shí)、調(diào)試復(fù)雜度高
import aiohttp
import asyncio

async def fetch_concurrent_data():
    """
    使用aiohttp并發(fā)獲取多個(gè)API數(shù)據(jù)
    """
    urls = [
        "https://jsonplaceholder.typicode.com/posts/1",
        "https://jsonplaceholder.typicode.com/comments/1"
    ]
    
    # 創(chuàng)建共享會(huì)話(自動(dòng)管理連接池)
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            # 創(chuàng)建并發(fā)任務(wù)
            task = asyncio.create_task(
                session.get(url, timeout=aiohttp.ClientTimeout(total=3))
            )
            tasks.append(task)
        
        # 等待所有任務(wù)完成
        responses = await asyncio.gather(*tasks)
        
        results = []
        for response in responses:
            # 檢查響應(yīng)狀態(tài)
            if response.status == 200:
                data = await response.json()
                results.append(data)
        return results

# 調(diào)用示例
if __name__ == "__main__":
    print(asyncio.run(fetch_concurrent_data()))

四、總結(jié)對(duì)比

方法適用場(chǎng)景性能表現(xiàn)難度
requests常規(guī)REST API調(diào)用★★★★☆簡(jiǎn)單
http.client底層協(xié)議控制★★☆☆☆中等
urllib簡(jiǎn)單請(qǐng)求/無(wú)依賴環(huán)境★★★☆☆簡(jiǎn)單
aiohttp高并發(fā)/異步任務(wù)★★★★★復(fù)雜

到此這篇關(guān)于Python調(diào)用API的常用方式解析的文章就介紹到這了,更多相關(guān)Python調(diào)用API方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python的pdb調(diào)試命令的命令整理及實(shí)例

    python的pdb調(diào)試命令的命令整理及實(shí)例

    這篇文章主要介紹了python的pdb調(diào)試命令的命令整理及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類(lèi)的實(shí)現(xiàn)

    python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類(lèi)的實(shí)現(xiàn)

    這篇文章主要為大家介紹了python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類(lèi)的實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Python制作動(dòng)態(tài)字符畫(huà)的源碼

    Python制作動(dòng)態(tài)字符畫(huà)的源碼

    python字符畫(huà)是一個(gè)簡(jiǎn)單有趣的圖畫(huà),它一般由程序制作而成,接下來(lái)通過(guò)本文給大家分享Python制作動(dòng)態(tài)字符畫(huà)的源碼,需要的朋友可以參考下
    2021-08-08
  • Python 如何將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))

    Python 如何將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))

    這篇文章主要介紹了Python 將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • django框架基于queryset和雙下劃線的跨表查詢操作詳解

    django框架基于queryset和雙下劃線的跨表查詢操作詳解

    這篇文章主要介紹了django框架基于queryset和雙下劃線的跨表查詢操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架queryset和雙下劃線的跨表查詢相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Python讀寫(xiě)csv文件流程及異常解決

    Python讀寫(xiě)csv文件流程及異常解決

    這篇文章主要介紹了Python讀寫(xiě)csv文件流程及異常解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 使用Python實(shí)現(xiàn)微信提醒備忘錄功能

    使用Python實(shí)現(xiàn)微信提醒備忘錄功能

    最近工作比較繁雜,經(jīng)常忘事,有時(shí)候記了備忘錄結(jié)果卻忘記看備忘錄,但是微信是每天都會(huì)看的,于是就想到寫(xiě) 一個(gè)基于微信的提醒系統(tǒng)。這篇文章主要介紹了使用Python實(shí)現(xiàn)微信提醒備忘錄功能,需要的朋友可以參考下
    2018-12-12
  • 使用pytorch進(jìn)行圖像的順序讀取方法

    使用pytorch進(jìn)行圖像的順序讀取方法

    今天小編就為大家分享一篇使用pytorch進(jìn)行圖像的順序讀取方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python計(jì)算數(shù)字或者數(shù)組的階乘的實(shí)現(xiàn)

    python計(jì)算數(shù)字或者數(shù)組的階乘的實(shí)現(xiàn)

    本文主要介紹了python計(jì)算數(shù)字或者數(shù)組的階乘,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python中實(shí)現(xiàn)常量(Const)功能

    Python中實(shí)現(xiàn)常量(Const)功能

    這篇文章主要介紹了Python中實(shí)現(xiàn)常量(Const)功能,python語(yǔ)言本身沒(méi)有提供const,本文使用一個(gè)類(lèi)來(lái)實(shí)現(xiàn)常量定義功能,并介紹了使用方法,需要的朋友可以參考下
    2015-01-01

最新評(píng)論