Saat bekerja dengan Python untuk berinteraksi dengan API web, terutama saat menangani banyak permintaan, Anda mungkin pernah mengalami beberapa penundaan. Baik itu mengunduh file, mengikis data, atau membuat permintaan ke API, menunggu setiap tugas selesai dapat memperlambat segalanya secara signifikan. Di sinilah pemrograman asinkron berperan untuk menyelamatkan hari, dan salah satu alat terbaik dalam ekosistem Python untuk ini adalah pustaka aiohttp.
Jika Anda tidak terbiasa dengan pemrograman asinkron, jangan khawatir! Saya akan menjelaskannya dengan istilah sederhana dan menjelaskan bagaimana aiohttp dapat membantu menyederhanakan permintaan web Anda, membuatnya lebih cepat dan lebih efisien.
Sebelum kita membahas lebih dalam, mari kita bahas sesuatu yang dihadapi setiap pengembang: pengujian API. Dan jika Anda seperti kebanyakan tim, Anda mungkin menggunakan Postman untuk itu.
Saya mengerti—Postman adalah alat yang familiar. Tapi jujur saja, bukankah kita semua memperhatikan bagaimana alat ini semakin kurang menarik dari tahun ke tahun? Namun, di sinilah Anda, bekerja sebagai tim, dan Anda membutuhkan alat kolaborasi untuk menjaga kelancaran proses pengembangan. Jadi, apa yang Anda lakukan? Anda berinvestasi di Postman Enterprise dengan harga $49 per bulan.
Tapi inilah masalahnya: Anda tidak harus melakukannya.
Ya, Anda tidak salah baca. Ada cara yang lebih baik dan lebih efisien untuk mengelola pengujian API dan kolaborasi tim tanpa harus mengeluarkan begitu banyak uang untuk alat yang, terus terang, tidak menawarkan apa yang pernah ditawarkannya. Mari kita jelajahi beberapa alternatif yang lebih baik!

APIDog: Anda Mendapatkan Semua yang Ada di Postman Versi Berbayar, Tetapi LEBIH MURAH
Benar sekali, APIDog memberi Anda semua fitur yang ada di Postman versi berbayar, dengan sebagian kecil dari biaya tersebut. Migrasi telah dilakukan dengan sangat mudah sehingga Anda hanya perlu mengklik beberapa tombol, dan APIDog akan melakukan semuanya untuk Anda.
APIDog pasti layak dicoba. Tetapi jika Anda adalah Pemimpin Teknis dari Tim Pengembang yang benar-benar ingin membuang Postman untuk sesuatu yang Lebih Baik, dan Lebih Murah, Lihat APIDog!
Apa itu aiohttp?
aiohttp adalah pustaka Python populer yang memungkinkan Anda menulis klien dan server HTTP asinkron. Anggap saja seperti pustaka requests Python tetapi ditingkatkan dengan kekuatan pemrograman asinkron.
Pustaka ini dibangun di atas kerangka kerja asyncio Python, yang berarti dapat menangani sejumlah besar permintaan secara bersamaan tanpa menunggu setiap permintaan selesai sebelum beralih ke permintaan berikutnya.
Bayangkan Anda berada di kedai kopi, dan alih-alih mengantre untuk setiap pesanan diselesaikan satu per satu, beberapa barista mulai mengerjakan pesanan Anda secara bersamaan.
Dengan aiohttp, seolah-olah Anda bekerja dengan tim barista, semuanya menyeduh kopi (atau, dalam hal ini, mengambil data) pada saat yang sama. Hasilnya? Hasil lebih cepat dengan lebih sedikit menunggu.
Mengapa Anda Harus Peduli dengan aiohttp?
Mari kita bicara tentang mengapa aiohttp penting bagi Anda, apakah Anda seorang pemula Python, ilmuwan data, pengikis web, atau bahkan pengembang berpengalaman.
- Performa: Alasan utama menggunakan aiohttp adalah performa. Jika Anda perlu membuat beberapa panggilan API atau permintaan ke situs web, aiohttp dapat menanganinya secara bersamaan.
Alih-alih memprosesnya satu demi satu, Anda dapat mengeksekusi lusinan atau bahkan ratusan permintaan pada saat yang sama. - Skalabilitas: Mengikis web atau memanggil beberapa API bisa menjadi proses yang lambat dan memblokir menggunakan pemrograman sinkron. Namun, dengan aiohttp, Anda dapat mengelola lebih banyak tugas dalam waktu yang lebih singkat, yang berarti aplikasi Anda dapat menangani peningkatan permintaan atau set data yang lebih besar.
- Waktu Tunggu yang Dikurangi: Program sinkron tradisional harus menunggu satu tugas selesai sebelum memulai tugas berikutnya.
Dengan kode asinkron, tugas tidak harus menunggu. Anda dapat mengunduh data dari beberapa URL sekaligus, mengurangi waktu proses secara drastis. - Penggunaan Sumber Daya yang Efisien: Pemrograman asinkron, dan khususnya aiohttp, membuat penggunaan sumber daya sistem Anda lebih efisien.
Alih-alih memblokir seluruh thread atau proses yang menunggu respons, aiohttp memungkinkan tugas lain berjalan sambil menunggu operasi I/O selesai.
Bagaimana Cara Kerja aiohttp?
Mari kita selami bagaimana aiohttp bekerja dalam praktiknya.
Pertama, mari kita perjelas apa sebenarnya arti pemrograman asinkron. Dalam program sinkron, setiap tugas harus selesai sebelum tugas berikutnya dimulai.
Jika Anda menunggu server web merespons permintaan Anda, seluruh program berhenti sampai respons itu tiba. Pemrograman asinkron memungkinkan program untuk terus mengeksekusi tugas lain sambil menunggu respons.
aiohttp memanfaatkan model asinkron ini untuk memungkinkan Anda mengirimkan beberapa permintaan HTTP sekaligus, dan kemudian menangani respons saat masuk. Berikut adalah contoh yang mendemonstrasikan ini dengan cara yang sederhana:
Cara Membuat Permintaan Web dengan aiohttp: Dasar-dasarnya

Diagram ini (gambar 2) membandingkan alur sinkron (satu tugas selesai sebelum tugas berikutnya) dan alur asinkron (beberapa tugas berjalan secara bersamaan).
Kotak biru mewakili tugas sinkron, sedangkan kotak hijau mewakili tugas asinkron.
Panah menunjukkan alur eksekusi untuk proses sinkron dan asinkron.
Visualisasi Event Loop (Mekanisme Loop dalam Model Asinkron Python)

Diagram ini (gambar 3) mengilustrasikan mekanisme event loop dalam model pemrograman asinkron Python.
Node mewakili langkah-langkah yang berbeda, seperti memulai tugas, menunggu operasi I/O, dan mengeksekusi callback.
Panah terarah menunjukkan bagaimana tugas dimulai, bagaimana mereka menunggu operasi I/O, dan bagaimana event loop menangani callback dan memulai ulang tugas.
Pengambilan URL Bersamaan di aiohttp

Diagram kasus penggunaan (gambar 4) memvisualisasikan bagaimana aiohttp dapat menangani beberapa permintaan URL secara bersamaan. Setiap proses "Ambil URL" ditangani secara bersamaan dan diteruskan ke node pemrosesan pusat.
Diagram ini menunjukkan bagaimana aiohttp dapat mengambil beberapa URL secara bersamaan dalam skenario pengikisan web atau permintaan API.
Diagram Alur Kerja

Diagram alur kerja memvisualisasikan pipeline data dasar, menunjukkan langkah-langkah pengambilan, pemrosesan, pembersihan, dan penyimpanan data.
Contoh: Membuat Permintaan Asinkron dengan aiohttp
import aiohttp
import asyncio
async def fetch_url(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = [
"https://jsonplaceholder.typicode.com/posts/1",
"https://jsonplaceholder.typicode.com/posts/2",
"https://jsonplaceholder.typicode.com/posts/3",
]
async with aiohttp.ClientSession() as session:
tasks = [fetch_url(session, url) for url in urls]
responses = await asyncio.gather(*tasks)
for i, response in enumerate(responses):
print(f"Response {i+1}: {response[:60]}...") # Print first 60 characters of each response
Run the event loop
asyncio.run(main())
Mengunduh konten secara sinkron
Pertama, mari kita coba melakukan ini secara sinkron menggunakan pustaka requests. Ini dapat diinstal menggunakan:
pip.python3.7 -m pip install requests
Mengunduh sumber daya online menggunakan requests sangat mudah.
import requestsresponse = requests.get("https://www.python.org/dev/peps/pep-8010/")print(response.content)
Ini akan mencetak konten HTML dari PEP 8010. Untuk menyimpannya secara lokal ke file:
filename = "sync_pep_8010.html"with open(filename, "wb") as pep_file:pep_file.write(content.encode('utf-8'))File sync_pep_8010.html akan dibuat.
Kasus Penggunaan Dunia Nyata untuk aiohttp
1. Pengikisan Web
Jika Anda mengikis beberapa halaman dari situs web, menunggu setiap halaman dimuat bisa menjadi proses yang sangat lambat. Dengan aiohttp, Anda dapat mengikis beberapa halaman secara bersamaan, mempercepat proses secara dramatis. Bayangkan saja mengambil ratusan halaman sekaligus alih-alih menunggu setiap halaman dimuat secara berurutan.
2. Permintaan API
Saat bekerja dengan API, terutama yang memiliki batasan laju atau merespons dengan lambat, Anda dapat mengirim beberapa permintaan sekaligus menggunakan aiohttp. Misalnya, jika Anda membuat kueri API cuaca untuk mendapatkan data untuk beberapa kota, aiohttp dapat membantu Anda mengumpulkan hasilnya lebih cepat.
3. Pengumpulan Data
Baik Anda bekerja dengan data pasar saham, umpan media sosial, atau situs web berita, aiohttp dapat menjadi pengubah permainan untuk menangani sejumlah besar permintaan HTTP secara bersamaan, memungkinkan Anda mengumpulkan data lebih cepat dan lebih efisien.
Berikut adalah tiga contoh praktis penggunaan pustaka aiohttp Python, lengkap dengan langkah-langkah dan contoh kode:
1. Membuat Permintaan HTTP Asinkron
Contoh ini menunjukkan cara membuat beberapa permintaan HTTP asinkron menggunakan aiohttp.
Langkah-langkah:
- Impor modul yang diperlukan
- Tentukan fungsi asinkron untuk mengambil URL
- Buat daftar URL untuk diambil
- Siapkan event loop asinkron
- Jalankan fungsi asinkron untuk setiap URL secara bersamaan
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = [
'https://api.github.com',
'https://api.github.com/events',
'https://api.github.com/repos/python/cpython'
]
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
responses = await asyncio.gather(*tasks)
for url, response in zip(urls, responses):
print(f"URL: {url}\nResponse length: {len(response)}\n")
asyncio.run(main())
2. Membuat Server API Sederhana
Contoh ini menunjukkan cara membuat server API dasar menggunakan aiohttp.
Langkah-langkah:
- Impor modul yang diperlukan
- Tentukan penangan rute
- Buat aplikasi dan tambahkan rute
- Jalankan aplikasi
from aiohttp import web
async def handle_root(request):
return web.json_response({"message": "Selamat datang di API"})
async def handle_users(request):
users = [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"},
{"id": 3, "name": "Charlie"}
]
return web.json_response(users)
app = web.Application()
app.add_routes([
web.get('/', handle_root),
web.get('/users', handle_users)
])
if __name__ == '__main__':
web.run_app(app)
3. Server Obrolan Websocket
Contoh ini menunjukkan cara membuat server obrolan berbasis websocket sederhana menggunakan aiohttp.
Langkah-langkah:
- Impor modul yang diperlukan
- Buat set untuk menyimpan websocket aktif
- Tentukan penangan websocket
- Buat aplikasi dan tambahkan rute
- Jalankan aplikasi
import aiohttp
from aiohttp import web
import asyncio
active_websockets = set()
async def websocket_handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
active_websockets.add(ws)
try:
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
for client in active_websockets:
if client != ws:
await client.send_str(f"User{id(ws)}: {msg.data}")
elif msg.type == aiohttp.WSMsgType.ERROR:
print(f"WebSocket connection closed with exception {ws.exception()}")
finally:
active_websockets.remove(ws)
return ws
app = web.Application()
app.add_routes([web.get('/ws', websocket_handler)])
if __name__ == '__main__':
web.run_app(app)
Untuk menguji server websocket ini, Anda dapat menggunakan klien websocket atau membuat halaman HTML sederhana dengan JavaScript untuk terhubung ke server.
Contoh-contoh ini menunjukkan berbagai aspek aiohttp, mulai dari membuat permintaan asinkron hingga membuat server web dan menangani websocket. Mereka memberikan fondasi yang kuat untuk membangun aplikasi yang lebih kompleks menggunakan pustaka yang kuat ini.
Kesimpulan
Di dunia yang didorong oleh data saat ini, kecepatan penting, dan kemampuan untuk menangani banyak tugas sekaligus dapat memberi Anda keunggulan. aiohttp adalah alat yang harus dimiliki dalam toolkit Python Anda jika Anda berurusan dengan pengikisan web, permintaan API, atau tugas lain yang mengharuskan pembuatan banyak permintaan HTTP.
Dengan menjadi asinkron, Anda tidak hanya menghemat waktu tetapi juga membuat kode Anda lebih efisien dan terukur.
Jadi, jika Anda ingin membawa permintaan web Python Anda ke tingkat berikutnya, cobalah aiohttp.
Anda akan segera melihat mengapa ini menjadi pilihan populer di kalangan pengembang yang berurusan dengan aplikasi yang banyak menggunakan I/O.
Apakah Anda merasa halaman ini bermanfaat? Saya harap ini adalah materi yang sangat kaya untuk Anda!
Semoga yang terbaik untuk Anda!



