Belajar FastAPI - Instalasi & Hello World
Episode 3 of 28

Belajar FastAPI - Instalasi & Hello World

Membangun aplikasi FastAPI pertama: menginstall fastapi dan uvicorn, menulis endpoint / dan /health, menjalankan uvicorn main:app --reload, lalu menjelajahi dokumentasi interaktif Swagger di /docs dan ReDoc di /redoc.

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

Pendahuluan

Setelah di episode 2 kita memahami arsitektur — path operation, alur validasi Pydantic, dan peran uvicorn sebagai server ASGI — sekarang saatnya menjalankan kode pertama. Di episode ini kita akan menginstall FastAPI dan uvicorn, menulis aplikasi minimal, lalu menjelajahi fitur yang paling menonjol: dokumentasi interaktif yang muncul otomatis.

Mengapa episode ini penting? Karena "Hello World" di FastAPI bukan sekadar menampilkan teks — ia memperlihatkan tiga hal sekaligus yang akan menyertai kalian di seluruh series: server dengan hot-reload, validasi otomatis, dan auto-docs. Kalau tiga hal ini terasa natural, separuh perjalanan sudah terbayar.

Instalasi

Pastikan virtual environment aktif (episode 0), lalu install:

Install FastAPI dan uvicorn
pip install "fastapi>=0.141,<0.142" "uvicorn[standard]>=0.30"

uvicorn[standard] penting karena menambahkan httptools (parser HTTP lebih cepat), uvloop (event loop native), dan dukungan WebSocket — semua dipakai di episode-episode lanjutan.

Aplikasi Pertama: main.py

Buat file main.py di folder lab:

Pythonmain.py
from fastapi import FastAPI
 
app = FastAPI()
 
 
@app.get("/")
def read_root() -> dict[str, str]:
    return {"message": "Halo Dunia FastAPI"}

Perhatikan tiga hal:

  1. app = FastAPI() membuat instance aplikasi — satu-satunya objek yang dikenal uvicorn.
  2. @app.get("/") mendaftarkan path operation GET /.
  3. Return value berupa dict langsung dikonversi JSON oleh FastAPI.

Jalankan server:

Jalankan server uvicorn
uvicorn main:app --reload

main:app berarti: ambil file main.py, cari objek bernama app. Flag --reload mengaktifkan hot-reload — setiap perubahan file memicu restart otomatis, sangat nyaman saat pengembangan.

Tip

--reload hanya untuk development. Di produksi (episode 24) kita justru menonaktifkannya dan mengandalkan multi-worker uvicorn/gunicorn, karena hot-reload memakan resource dan bisa menurunkan throughput.

Uji dengan curl

Dari terminal kedua, uji endpoint-nya:

Uji endpoint GET /
curl -s http://127.0.0.1:8000/

Output:

Response
{"message":"Halo Dunia FastAPI"}

FastAPI mengubah dict Python menjadi JSON dengan header content-type: application/json secara otomatis.

Dokumentasi Interaktif: /docs dan /redoc

Ini fitur pembeda FastAPI. Buka browser:

  • Swagger UI di http://127.0.0.1:8000/docs — antarmuka interaktif untuk mengeksekusi endpoint langsung dari browser.
  • ReDoc di http://127.0.0.1:8000/redoc — dokumentasi dua panel yang lebih cocok untuk dibaca.

Kedua halaman itu bukan template hardcoded — keduanya dirender dari schema OpenAPI yang dihasilkan FastAPI secara otomatis dari kode kalian. Bisa dilihat mentahnya di:

Lihat schema OpenAPI mentah
curl -s http://127.0.0.1:8000/openapi.json | python -m json.tool | head -30

Schema inilah yang dipakai banyak tool untuk auto-generate client, validasi request, dan dokumentasi — topik yang kita dalami di episode 21.

Menambah Endpoint dan Menyelami Auto-docs

Mari perlihatkan kekuatan auto-docs: tambahkan endpoint yang membutuhkan input. Ubah main.py:

Pythonmain.py - menambah endpoint
from fastapi import FastAPI
 
app = FastAPI()
 
 
@app.get("/")
def read_root() -> dict[str, str]:
    return {"message": "Halo Dunia FastAPI"}
 
 
@app.get("/items/{item_id}")
def read_item(item_id: int) -> dict[str, int | str]:
    return {"item_id": item_id}

Perhatikan item_id: int. Karena kita menandai tipe sebagai int, FastAPI otomatis:

  • Memvalidasi input — request /items/abc ditolak dengan HTTP 422.
  • Mengkonversi — request /items/42 masuk ke fungsi sebagai 42 (int), bukan string.

Uji validasinya:

Uji validasi otomatis
curl -i -s http://127.0.0.1:8000/items/42
curl -i -s http://127.0.0.1:8000/items/abc

Buka lagi /docs — kalian akan melihat endpoint baru sudah muncul, lengkap dengan parameter dan tipe data. Tidak ada satu baris dokumentasi pun yang ditulis manual.

Note

Status 422 Unprocessable Entity adalah "sidik jari" FastAPI: itu bukan error server, melainkan indikasi bahwa input tidak sesuai tipe yang dideklarasikan. Di episode 5 dan 17 kita akan mengkustomisasi detail error-nya.

Common Pitfalls Episode Ini

PitfallGejalaSolusi
Menjalankan uvicorn di luar environmentModuleNotFoundError: No module named 'fastapi'Aktifkan .venv dulu
Nama file atau objek salahCould not import module 'main'Pastikan nama cocok: uvicorn main:app
Lupa --reloadPerubahan tidak munculTambahkan --reload saat development
Port sudah dipakai[Errno 98] Address already in useGanti port: uvicorn main:app --port 8001

Penutup

Inti yang harus dibawa pulang:

  • Install fastapi dan uvicorn[standard]; jalankan dengan uvicorn main:app --reload.
  • Endpoint = dekorator + fungsi; return dict otomatis jadi JSON.
  • /docs (Swagger) dan /redoc dirender dari schema OpenAPI yang dihasilkan dari type hints.
  • Tipe parameter menentukan validasi otomatis — input yang salah ditolak dengan 422.

Di episode 4 selanjutnya kita akan membahas routing & path parameters secara lengkap — semua HTTP methods (GET/POST/PUT/DELETE), path params dengan validasi tipe, query params, hingga aturan urutan parameter yang sering menjebak pemula. Pastikan uvicorn --reload tetap berjalan, karena kita akan menulis banyak endpoint baru!