Mengenal aiohttp: Senjata Rahasia Developer Python Bikin Web Super Cepat

Mengenal aiohttp: Senjata Rahasia Developer Python Bikin Web Super Cepat

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.

Baca juga: Wujud Cinta Tanah Air: Universitas Teknokrat Indonesia Gelar Sholat Ghaib, Doa, dan Zikir Bersama untuk Kedamaian Bangsa

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

More From Author

Wajib Tahu! Ini Dia Cordova, Senjata Baru Developer Anti Pusing

Mengenal Ionic, Jurus Developer Web Jadi Developer Mobile

Leave a Reply

Your email address will not be published. Required fields are marked *