Membedah bagaimana request mengalir dari uvicorn lewat protokol ASGI sampai path operation, memahami lapisan Starlette, dependency injection, dan bagaimana Pydantic mengotomasi validasi request dan serialisasi response.

Setelah di episode 1 kita memahami sejarah dan filosofi FastAPI — framework yang typing-first, dibangun di atas Starlette dan Pydantic — pada episode ini kita membedah arsitektur internal dan konsep kunci yang akan dipakai di seluruh series. Ini adalah fondasi mental: begitu kalian memahami bagaimana request mengalir dari jaringan sampai kembali lagi, semua episode berikutnya tinggal menambahkan detail di titik yang tepat.
Mengapa pemahaman arsitektur penting? Karena FastAPI kadang terasa seperti "keajaiban" — tulis type hints, dapat validasi dan dokumentasi gratis. Padahal tidak ada keajaiban: ada pipeline yang jelas, dan memahami pipeline-nya membuat kalian bisa mendiagnosis masalah, bukan sekadar menghafal sintaks.
FastAPI tidak berbicara HTTP secara langsung — itu urusan server ASGI (uvicorn). ASGI (Asynchronous Server Gateway Interface) adalah standar antarmuka antara server Python dan framework web, penerus WSGI yang mendukung async. Alurnya:
Perbedaan penting dengan WSGI (yang dipakai Flask/Django klasik):
| WSGI | ASGI | |
|---|---|---|
| Mode | Sync hanya | Sync + async |
| Koneksi | Request/response satu arah | Juga WebSocket, SSE, long-polling |
| Model | Fungsi penerima request | Objek scope, receive, send |
Karena berbasis ASGI, FastAPI bisa menangani WebSocket dan streaming (topik episode 13 dan 23) tanpa hack — protokolnya memang dirancang untuk itu.
Tip
Analoginya seperti restoran: WSGI adalah pelayan yang hanya bisa menerima pesanan satu per satu dan menunggu koki selesai; ASGI adalah pelayan yang bisa menerima banyak pesanan sambil tetap melayani pelanggan lain. Dalam arsitektur FastAPI, uvicorn adalah pelayannya dan path operation adalah koki.
Setiap endpoint di FastAPI dibangun dari path operation — kombinasi dari tiga hal:
/items/42.GET, POST, PUT, DELETE.Dekorasinya memakai satu baris:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root() -> dict[str, str]:
return {"message": "Halo Dunia"}@app.get("/") menentukan bahwa fungsi root menangani request GET /. Nama operasinya sendiri (misal read_root) menjadi operation ID di OpenAPI, dan docstring fungsi menjadi deskripsi otomatis di dokumentasi.
FastAPI sering digambarkan sebagai "Starlette di bawah, Pydantic di samping". Secara praktis, arsitekturnya berlapis:
app.add_middleware untuk middleware (episode 11).Yang membuat FastAPI unik adalah alur data yang selalu melewati Pydantic. Ketika sebuah request masuk:
path, query, header, cookie, atau body.response_model → serialisasi JSON.Inilah kenapa "validasi otomatis" bukan sekadar klaim: FastAPI tidak bisa menerima input yang tidak sesuai tipe, karena semuanya dituntun oleh type hints di kode kalian.
Dependency injection (DI) adalah pola di mana fungsi handler meminta apa yang dibutuhkan, dan framework yang menyediakannya — bukan handler yang membuat sendiri. Contoh paling sederhana, yang akan kita perdalam di episode 8:
from fastapi import FastAPI, Depends
app = FastAPI()
def common_params(q: str | None = None) -> dict[str, str | None]:
return {"q": q}
@app.get("/items/")
def read_items(params: dict = Depends(common_params)) -> dict:
return paramsDepends(common_params) memberi tahu FastAPI: jalankan common_params dulu, lalu masukkan hasilnya ke parameter params. DI memungkinkan kita menaruh logika bersama — koneksi database, autentikasi, pagination — di satu tempat, dan memakainya di banyak endpoint.
Important
DI bukan hanya soal kode yang lebih rapi — ini adalah titik di mana FastAPI bisa mengganti implementasi saat testing. Di episode 10 kita akan menimpa dependency dengan dependency palsu (dependency override) untuk menguji CRUD tanpa menyentuh database sungguhan. Ini mungkin fitur testing terkuat di FastAPI.
| Konsep | Definisi | Episode berikutnya |
|---|---|---|
| Path operation | Endpoint = path + method + handler | 3-4 |
| Pydantic model | Schema validasi request/response | 5-7 |
| Dependency | Logika bersama yang di-inject | 8 |
| Middleware | Pipeline sebelum/ sesudah routing | 11 |
| ASGI server | uvicorn menjalankan aplikasi | 3, 24 |
Pada episode 2 ini, kalian telah memahami bagaimana FastAPI bekerja dari dalam: alur ASGI, peran path operation, pembagian kerja Starlette dan Pydantic, serta konsep dependency injection.
Inti yang harus dibawa pulang:
Di episode 3 selanjutnya kita akan menginstall dan menjalankan aplikasi FastAPI pertama — dari pip install fastapi "uvicorn[standard]", menjalankan uvicorn main:app --reload, sampai menjelajahi dokumentasi interaktif di /docs dan /redoc. Pastikan environment episode 0 sudah siap, karena hands-on dimulai sekarang!