Di dunia pengembangan web modern, kecepatan adalah segalanya. Pengguna mengharapkan aplikasi merespons dalam sekejap, dan Google bahkan menjadikan kecepatan situs sebagai salah-satu faktor peringkat. Selama bertahun-tahun, Python dengan framework seperti Django dan Flask telah menjadi andalan untuk membangun aplikasi web yang andal. Namun, ketika berbicara tentang menangani ribuan koneksi secara bersamaan seperti pada aplikasi chat, dashboard real-time, atau API gateway Python dengan model sinkron tradisionalnya seringkali mulai kewalahan. Di sinilah sebuah “senjata rahasia” muncul dari ekosistem Python: aiohttp
.
aiohttp
adalah sebuah framework web asinkron dan juga pustaka HTTP client/server yang dibangun di atas asyncio
, pustaka standar Python untuk menulis kode konkuren. Bagi developer yang belum terbiasa, istilah “asinkron” mungkin terdengar rumit. Namun, inilah inti dari kekuatan aiohttp
yang memungkinkannya membangun aplikasi web super cepat. Artikel ini akan mengupas tuntas apa itu aiohttp
, bagaimana cara kerjanya, dan mengapa ia menjadi pilihan utama untuk aplikasi modern yang menuntut performa tinggi.
Baca juga: Hindari 7 Dosa Ini dalam Proyek Perangkat Lunak Anda
Paradigma Asynchronous: Kunci Kecepatan aiohttp
Untuk memahami kehebatan aiohttp
, kita harus terlebih dahulu memahami perbedaan antara kode sinkron (synchronous) dan asinkron (asynchronous).
Bayangkan seorang barista di kedai kopi yang bekerja secara sinkron. Ketika seorang pelanggan memesan kopi, barista tersebut akan mengambil pesanan, menggiling biji kopi, menyeduh, menuangkan ke cangkir, lalu memberikannya kepada pelanggan. Selama seluruh proses ini terutama saat menunggu mesin kopi selesai menyeduh barista tersebut hanya diam menunggu. Ia tidak akan melayani pelanggan lain sampai pesanan pertama benar-benar selesai. Inilah cara kerja aplikasi web tradisional. Ketika sebuah permintaan masuk yang memerlukan akses ke database atau API eksternal, aplikasi akan berhenti dan menunggu sampai operasi tersebut selesai sebelum melanjutkan.
Sekarang, bayangkan barista yang bekerja secara asinkron. Saat ia menerima pesanan dan mulai menyeduh kopi (sebuah proses yang butuh waktu), ia tidak diam menunggu. Ia akan meninggalkan mesin kopi yang sedang bekerja dan langsung melayani pelanggan berikutnya, mengambil pesanannya. Ketika kopi pertama selesai diseduh, ia akan kembali untuk menyiapkannya. Dalam waktu yang sama, ia bisa menangani beberapa pesanan sekaligus.
Inilah filosofi di balik aiohttp
dan asyncio
. Ia memungkinkan sebuah aplikasi untuk menangani operasi yang memakan waktu (disebut I/O-bound, seperti permintaan jaringan, akses database, atau membaca file) tanpa harus “memblokir” atau menghentikan seluruh alur kerja. Ketika aplikasi menunggu respons dari database, ia bisa menggunakan waktu tunggunya untuk melayani ribuan permintaan lain yang masuk. Ini dicapai di Python melalui sintaks async
dan await
yang elegan.
aiohttp sebagai Server: Membangun Web Service Ringan dan Kencang
Salah satu fungsi utama aiohttp
adalah sebagai framework untuk membangun sisi server aplikasi web. Jika Anda pernah menggunakan Flask atau FastAPI, Anda akan merasa cukup familiar dengan konsep dasarnya, namun dengan sentuhan asinkron. Dengan aiohttp
, setiap fungsi yang menangani permintaan (request handler) didefinisikan sebagai fungsi async
.
Mari kita lihat contoh sederhana sebuah server “Hello World” dengan aiohttp
:
Python
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = f"Hello, {name}"
return web.Response(text=text)
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Pada kode di atas, fungsi handle
didefinisikan dengan async def
, menandakan bahwa ini adalah sebuah coroutine yang dapat berjalan secara asinkron. Ini berarti saat handle
sedang menunggu sesuatu (misalnya, await db.fetch_user()
), server aiohttp
tidak akan berhenti, melainkan akan memproses permintaan lain yang masuk.
Kemampuan ini membuat aiohttp
sangat ideal untuk membangun:
- API Gateways: Sebuah layanan yang menerima ribuan permintaan dan meneruskannya ke berbagai microservice lain.
aiohttp
dapat melakukan semua panggilan ini secara bersamaan. - Aplikasi Real-time: Seperti aplikasi chat atau notifikasi, di mana server harus menjaga koneksi WebSocket yang persisten dengan ribuan klien secara simultan.
- Microservices: Layanan kecil yang sangat bergantung pada komunikasi jaringan dengan layanan lain.
aiohttp sebagai Client: Jagonya Bikin Ribuan Request Sekaligus
Kekuatan aiohttp
tidak hanya terbatas pada sisi server. Ia juga menyediakan library client yang luar biasa kuat untuk membuat permintaan HTTP secara asinkron. Ini adalah kasus penggunaan yang sangat umum dan seringkali menjadi alasan utama developer beralih ke aiohttp
.
Bayangkan Anda perlu mengambil data dari 1.000 URL berbeda untuk keperluan web scraping atau mengumpulkan data dari banyak API. Jika menggunakan pustaka sinkron populer seperti requests
dalam sebuah loop, setiap permintaan harus menunggu permintaan sebelumnya selesai. Jika setiap permintaan memakan waktu 1 detik, maka total waktu yang dibutuhkan adalah 1.000 detik.
Dengan aiohttp.ClientSession
, Anda dapat meluncurkan semua 1.000 permintaan tersebut secara bersamaan. Aplikasi Anda tidak akan menunggu satu per satu, melainkan menunggu semuanya selesai dalam waktu yang hampir sama dengan permintaan paling lambat.
Python
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = [...] # Daftar 1000 URL
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
# Lakukan sesuatu dengan results
Dengan pola seperti ini, pekerjaan yang tadinya memakan waktu lebih dari 15 menit bisa diselesaikan dalam hitungan detik. Inilah yang membuat aiohttp
menjadi “senjata rahasia” untuk tugas-tugas yang melibatkan banyak sekali operasi jaringan.
Kapan Sebaiknya Menggunakan aiohttp?
Meskipun sangat kuat, aiohttp
bukanlah solusi untuk semua masalah. Ia bersinar paling terang pada aplikasi yang bersifat I/O-bound. Artinya, sebagian besar waktu aplikasi dihabiskan untuk menunggu operasi input/output, seperti menunggu data dari jaringan, database, atau disk.
Namun, untuk tugas yang bersifat CPU-bound—di mana sebagian besar waktu dihabiskan untuk perhitungan intensif seperti pemrosesan gambar, analisis data kompleks, atau enkripsi model asinkron aiohttp
tidak akan memberikan banyak keuntungan. Untuk kasus seperti ini, pendekatan multiprocessing biasanya lebih cocok.
Singkatnya, aiohttp
adalah pilihan yang tepat ketika aplikasi Anda perlu melakukan banyak hal yang berhubungan dengan “menunggu”. Ia mengubah waktu tunggu yang tidak produktif menjadi kesempatan untuk mengerjakan hal lain, menghasilkan throughput yang luar biasa tinggi dan efisiensi sumber daya yang jauh lebih baik. Bagi developer Python yang ingin membangun aplikasi web generasi berikutnya yang cepat dan skalabel, mempelajari aiohttp
bukan lagi pilihan, melainkan sebuah keharusan.
Penulis: Indra Irawan