اگه حتی یک بار هم توی پایتون نیاز پیدا کرده باشید که به یک API وصل بشید یا دیتایی رو از وب بگیرید، محاله با کتابخونه Requests خاطره نداشته باشید. همون شعار معروفش یعنی "Requests is for Humans" واقعاً درست بود؛ ساده، تمیز و بیدردسر.
اما خب، دنیای تکنولوژی خیلی سریع حرکت میکنه و گاهی اوقات ابزارهای محبوب قدیمی، دیگه جوابگوی نیازهای مدرن ما نیستن. اینجاست که سر و کلهی HTTPX پیدا میکنه؛ غول جدیدی که اومده تا جای Requests رو بگیره. بیایید با هم بررسی کنیم که چرا وقتش رسیده Requests رو بذاریم کنار و به HTTPX سلام کنیم!
مشکل Requests چیه مگه؟ کارمون رو که راه میاندازه!
آره، درسته! واسه پروژههای کوچیک و خونگی، Requests هنوزم مثل ساعت کار میکنه. اما مشکل بزرگش چیه؟ سینکرون (Synchronous) بودن یا همون همزمانی سنتی.
کتابخونه Requests کاملاً بلاککننده (Blocking) هست. یعنی وقتی شما یه درخواست به یه سرور میفرستید، کل برنامهتون قفل میشه و منتظر میمونه تا جواب سرور بیاد. توی دوران مدرن پایتون که با asyncio، فریمورکهای خفنی مثل FastAPI و برنامه های چند هزار کاربره سروکار داریم، این بلاک شدن یعنی فاجعه و افت شدید سرعت!
اگر میخواستید کار اسینک بکنید، مجبور بودید برید سراغ کتابخونه هایی مثل aiohttp که سینتکسش اصلاً به دلنشینی Requests نبود و کلی کد اضافه روی دستتون میذاشت.
چرا HTTPX آینده پایتونه؟ (ویژگیهای برگبرنده)
کتابخونه HTTPX نیومده که چرخ رو از اول اختراع کنه؛ اومده همون مسیر Requests رو با آپدیتهای قرن ۲۱ ادامه بده. اینا دلایلی هستن که HTTPX رو برنده این بازی میکنن:
-
پشتیبانی کامل از Async: بزرگترین برگ برندهش همینه. هم میتونی باهاش کدهای معمولی (Sync) بنویسی و هم کدهای ناهمگام (Async) با استفاده از
async/await. -
پشتیبانی از HTTP/2: کتابخونه Requests فقط از HTTP/1.1 پشتیبانی میکنه. اما HTTPX از HTTP/2 هم پشتیبانی میکنه که یعنی سرعت بالاتر، ارسال همزمان چند درخواست روی یک اتصال (Multiplexing) و بهینهسازی فوقالعاده شبکه.
-
دوقلوی همسان Requests (یادگیری صفر!): طراحان HTTPX جوری API این کتابخونه رو ساختن که تقریباً ۹۹٪ شبیه به Requests هست. یعنی اگه Requests بلد باشی، همین الان HTTPX هم بلدی!
-
تستنویسی راحتتر: قابلیت هایی داره که میتونی مستقیماً به اپلیکیشنهای WSGI (مثل جنگو و فلاسک) یا ASGI (مثل FastAPI) درخواست بفرستی، بدون اینکه نیاز باشه سرور واقعی رو بالا بیاری.
بیایید کدها رو مقایسه کنیم
برای اینکه ببینی چقدر جابهجایی و مهاجرت به این کتابخونه راحته، به این دوتا کد نگاه کن:
۱. مدل سنتی (Sync) با HTTPX
دقیقاً کپی برابر اصل Requests:
import httpx
# به جای requests.get نوشتیم httpx.get
response = httpx.get('https://api.github.com/events')
print(response.status_code)
print(response.json())
۲. مدل مدرن (Async) با HTTPX
اینجاست که جادو شروع میشه! وقتی کلی ریکوئست داری و نمیخوای برنامهات معطل بمونه:
import httpx
import asyncio
async def fetch_data():
# استفاده از AsyncClient برای ریکوئستهای ناهمگام
async with httpx.AsyncClient() as client:
response = await client.get('https://api.github.com/events')
print(response.status_code)
asyncio.run(fetch_data())
جمع بندی
خلاصه بگیم، کتابخونه Requests دوران طلایی خودش رو داشت اما برای دنیای امروز پایتون دیگه پیر شده. در عوض HTTPX با پشتیبانی از Async و HTTP/2 اومده تا سرعت و همزمانی رو به کدهات تزریق کنه. جذابیتش اینه که سینتکسش مو با Requests نمیزنه، پس برای کوچ کردن نیاز به یادگیری چیز جدیدی نداری. اگه با فریمورک های جدیدی مثل FastAPI کار میکنی، استفاده از HTTPX برات یه ضرورت واجب به حساب میاد. پس واسه پروژه های بعدی اصلاً معطل نکن؛ با Requests خداحافظی کن و آینده رو با HTTPX شروع کن!
نظرات کاربران (0)