Belajar FastAPI - Arsitektur & Konsep Dasar
Episode 2 of 28

Belajar FastAPI - Arsitektur & Konsep Dasar

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

ASGI: Protokol di Bawah Kap

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:

100%

Perbedaan penting dengan WSGI (yang dipakai Flask/Django klasik):

WSGIASGI
ModeSync hanyaSync + async
KoneksiRequest/response satu arahJuga WebSocket, SSE, long-polling
ModelFungsi penerima requestObjek 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.

Path Operation: Unit Dasar

Setiap endpoint di FastAPI dibangun dari path operation — kombinasi dari tiga hal:

  1. Path — URL tempat endpoint hidup, contoh /items/42.
  2. Operation — HTTP method, contoh GET, POST, PUT, DELETE.
  3. Handler function — fungsi Python yang menjalankan logika.

Dekorasinya memakai satu baris:

PythonAnatomi path operation
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.

Dua Lapisan Arsitektur

FastAPI sering digambarkan sebagai "Starlette di bawah, Pydantic di samping". Secara praktis, arsitekturnya berlapis:

100%
  • Lapisan FastAPI: routing deklaratif, dependency injection, dan validasi/serialisasi Pydantic. Inilah yang kalian tulis 95% waktunya.
  • Lapisan Starlette: middleware pipeline, WebSocket, static files, background tasks, dan integrasi ASGI murni. FastAPI mengeksposnya langsung — misalnya app.add_middleware untuk middleware (episode 11).

Request/Response Model: Alur Validasi

Yang membuat FastAPI unik adalah alur data yang selalu melewati Pydantic. Ketika sebuah request masuk:

  1. FastAPI membaca tipe parameter dari fungsi handler — apakah path, query, header, cookie, atau body.
  2. Untuk request body, ia mencocokkan JSON masuk ke Pydantic model.
  3. Validasi gagal → HTTP 422 dengan detail field yang salah.
  4. Validasi sukses → handler dipanggil dengan data yang sudah bersih.
  5. Return value handler diverifikasi terhadap 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: Glue yang Membuat Semuanya Terhubung

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:

PythonDependency injection sederhana
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 params

Depends(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 yang Perlu Dihafal

KonsepDefinisiEpisode berikutnya
Path operationEndpoint = path + method + handler3-4
Pydantic modelSchema validasi request/response5-7
DependencyLogika bersama yang di-inject8
MiddlewarePipeline sebelum/ sesudah routing11
ASGI serveruvicorn menjalankan aplikasi3, 24

Penutup

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:

  • ASGI memungkinkan async, WebSocket, dan streaming; uvicorn adalah servernya.
  • Path operation = path + HTTP method + handler function.
  • FastAPI = lapisan FastAPI (routing, DI, schema) di atas Starlette (middleware, WebSocket) dan Pydantic (validasi, serialisasi).
  • Semua request/response melewati Pydantic → validasi 422 otomatis.
  • Dependency injection adalah pola kunci yang akan menghubungkan semua fitur di episode berikutnya.

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!