Episode ini membahas komunikasi HTTP dari Python: penggunaan modern requests, httpx untuk mode sync dan async, pengaturan retries, timeouts, dan connection pooling, serta gambaran server WSGI dengan Gunicorn dan ASGI dengan Uvicorn.

Hampir semua aplikasi modern berkomunikasi lewat HTTP — memanggil API, mengirim data, dan berintegrasi dengan layanan lain. Episode 12 membekali kalian dengan keterampilan networking: cara Python menjadi klien HTTP yang andal.
Kita akan membandingkan requests dan httpx, belajar mengatur retries, timeouts, dan connection pooling, lalu memahami server WSGI dan ASGI yang menjadi fondasi web framework di episode 13.
requests adalah library HTTP paling populer untuk Python:
pip install requestsimport requests
resp = requests.get("https://httpbin.org/json", timeout=10)
print(resp.status_code)
print(resp.json())requests.get("https://httpbin.org/json", timeout=10) mengirim request GET dan resp.json() menguraikan body JSON. Selalu set timeout agar request tidak menggantung selamanya — salah satu penyebab aplikasi terasa lambat.
httpx adalah penerus modern requests dengan dukungan HTTP/2 dan async. API-nya hampir identik, jadi peralihan mudah:
pip install httpximport httpx
resp = httpx.get("https://httpbin.org/json", timeout=10.0)
print(resp.status_code)
print(resp.json()["slideshow"]["title"])httpx.get(url, timeout=10.0) berperilaku seperti requests. Perbedaan utama ada di dukungan async yang bisa menjalankan banyak request bersamaan.
Mode async memakai event loop dan kata kunci await:
import asyncio
import httpx
async def ambil():
async with httpx.AsyncClient(timeout=10.0) as klien:
resp = await klien.get("https://httpbin.org/json")
return resp.json()
hasil = asyncio.run(ambil())
print(hasil["slideshow"]["title"])async with httpx.AsyncClient(timeout=10.0) as klien: membuka klien async. await klien.get(...) menunggu response tanpa memblokir thread lain. Pola ini sangat efisien untuk banyak request bersamaan dan cocok dengan FastAPI di episode 13.
Timeout mencegah aplikasi menggantung saat layanan lambat:
import httpx
klien = httpx.Client(
timeout=httpx.Timeout(connect=5.0, read=30.0, write=10.0, pool=5.0)
)
print(klien.timeout.read)httpx.Timeout(connect=5.0, read=30.0, ...) memisahkan batas waktu untuk koneksi, baca, tulis, dan pool. Waktu baca yang panjang mengakomodasi API lambat, sementara koneksi tetap cepat gagal jika target tidak terjangkau.
Retry menangani kegagalan sementara. httpx mendukungnya lewat transport:
import httpx
transport = httpx.HTTPTransport(retries=3)
klien = httpx.Client(transport=transport, timeout=10.0)
resp = klien.get("https://httpbin.org/status/500")
print(resp.status_code)httpx.HTTPTransport(retries=3) membuat transport yang mencoba ulang koneksi yang gagal hingga tiga kali. Untuk retry yang lebih cerdas — misalnya memakai exponential backoff — pertimbangkan library tenacity atau backoff.
Pooling memakai ulang koneksi TCP untuk request berikutnya, menghemat overhead handshake:
import httpx
klien = httpx.Client(
limits=httpx.Limits(max_connections=20, max_keepalive_connections=10)
)
for _ in range(5):
resp = klien.get("https://httpbin.org/json")
print(resp.status_code)
klien.close()httpx.Limits(max_connections=20, max_keepalive_connections=10) membatasi jumlah koneksi yang dibuka. Memakai satu klien untuk banyak request menghindari membuat koneksi baru setiap kali — pola penting untuk layanan ber-traffic tinggi.
Server web Python mengikuti dua spesifikasi berbeda:
Perbedaan inti ada di model eksekusi: WSGI satu request satu thread, ASGI satu event loop menangani banyak request.
Gunicorn adalah server WSGI production yang populer:
pip install gunicorngunicorn --workers 4 --bind 0.0.0.0:8000 app:appgunicorn --workers 4 --bind 0.0.0.0:8000 app:app menjalankan aplikasi WSGI dengan empat worker. Gunicorn mengelola process dan thread untuk menangani banyak request — menjadi tulang punggung deployment Flask dan Django.
Uvicorn adalah server ASGI untuk aplikasi async:
pip install "uvicorn[standard]"uvicorn --workers 4 --host 0.0.0.0 --port 8000 app:appuvicorn --workers 4 --host 0.0.0.0 --port 8000 app:app menjalankan aplikasi ASGI. Uvicorn memakai event loop untuk menangani ribuan koneksi bersamaan — fondasi performa FastAPI yang akan kita bangun di episode berikutnya.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya kita akan membahas web frameworks dan API design — perbandingan Flask, Django, dan FastAPI, cara memilih framework yang tepat, merancang RESTful dan GraphQL API, serta versioning, pagination, dan validasi input. Inilah saatnya membangun API sungguhan!