Apa itu FastAPI? Panduan Praktis untuk Membangun API
FastAPI adalah framework Python modern untuk membangun API dengan cepat menggunakan type hints, validasi, dan dokumentasi OpenAPI otomatis. Pelajari dasar dan penggunaannya.

FastAPI dalam Satu Menit: Definisi Singkat
FastAPI adalah framework Python untuk membangun web API dengan cepat, kode yang jelas, dan dokumentasi otomatis. Anda menulis fungsi kecil (disebut “endpoint”) yang menyatakan data apa yang API Anda terima dan apa yang dikembalikan, dan FastAPI mengurus bagian web—routing, validasi, dan pembuatan respons JSON.
Apa itu API? Contoh Sederhana
API adalah sekumpulan URL yang memungkinkan satu perangkat lunak berkomunikasi dengan perangkat lunak lain.
Misalnya, aplikasi cuaca di ponsel Anda mungkin memanggil URL seperti GET /weather?city=Berlin. Server menjawab dengan data terstruktur (biasanya JSON), seperti suhu dan prakiraan. Aplikasi ponsel tidak perlu akses langsung ke database server—ia cukup meminta API dan menampilkan hasilnya.
FastAPI membantu Anda membuat URL dan respons itu dalam Python.
Siapa yang Cocok Menggunakan FastAPI?
- Pemula yang menginginkan cara modern dan terarah untuk membangun API tanpa menulis banyak boilerplate.
- Pengembang tunggal yang perlu bergerak cepat sambil menjaga kode tetap terbaca.
- Tim yang membangun layanan produksi yang mendapat manfaat dari validasi kuat, kontrak yang konsisten, dan dokumentasi yang bagus.
Anda tidak perlu ahli async untuk memulai; Anda bisa menulis endpoint sederhana dan mengadopsi pola yang lebih maju seiring perkembangan.
Apa yang Akan Anda Pelajari di Panduan Ini
- Apa yang membedakan FastAPI dari pilihan API Python lain
- Bagaimana request dan response bekerja (dan apa arti “async”)
- Bagaimana validasi data bekerja dengan Pydantic
- Bagaimana FastAPI menghasilkan dokumentasi OpenAPI (Swagger UI dan ReDoc)
- Cara menyusun aplikasi dengan dependencies, keamanan, testing, dan dasar deployment
Mengapa FastAPI Menjadi Populer
FastAPI cepat populer karena menghilangkan banyak gesekan sehari-hari yang ditemui orang saat membangun API di Python.
Menangani masalah umum pada API
Proyek API tradisional sering dimulai dengan setup yang lambat dan banyak “plumbing”:
- Menulis sendiri (dan menjaga) parsing request, validasi, dan pesan error
- Kontrak API yang tidak jelas—apa tepatnya yang diterima dan dikembalikan endpoint ini?
- Dokumentasi yang ketinggalan dari kode, terutama saat tim berkembang
Fitur inti FastAPI menargetkan masalah-masalah ini secara langsung, sehingga tim menghabiskan lebih banyak waktu mendesain endpoint dan lebih sedikit waktu melawan boilerplate framework.
Type hints membuat kode seperti kontrak
FastAPI sangat memanfaatkan type hints Python. Saat Anda menyatakan bahwa sebuah field adalah int, opsional, atau list dari sesuatu, FastAPI memakai informasi itu untuk memvalidasi input dan membentuk output.
Ini mengurangi kesalahan “stringly-typed” (mis. memperlakukan ID sebagai teks di satu tempat dan angka di tempat lain) dan mendorong perilaku endpoint yang konsisten. Ini tetap Python, tetapi dengan ekspektasi yang lebih jelas tercantum di tanda tangan fungsi.
Dokumentasi otomatis mempercepat tim
Karena skema API diturunkan dari kode, FastAPI dapat menghasilkan dokumentasi interaktif otomatis (OpenAPI + Swagger UI/ReDoc). Itu penting untuk kolaborasi: front-end developers, QA, dan integrator dapat menjelajahi endpoint, mencoba request, dan melihat model tepat tanpa menunggu upaya dokumentasi terpisah.
Populer, tapi bukan solusi ajaib
FastAPI tidak akan memperbaiki desain API yang buruk. Anda tetap membutuhkan penamaan yang baik, versioning, penanganan error, dan keputusan keamanan. Yang ditawarkan adalah jalur yang lebih bersih dari “ide” ke “API yang terdefinisi dengan baik” dengan lebih sedikit kejutan di sepanjang jalan.
Konsep Kunci yang Perlu Anda Ketahui
FastAPI terasa mudah setelah Anda memahami beberapa ide inti yang menjadi dasar. Anda tidak perlu menghafal detail internal—cukup kenali bagian-bagian yang akan Anda gunakan sehari-hari.
FastAPI adalah sebuah framework
Sebuah framework adalah kumpulan alat dan konvensi untuk membangun API tanpa memulai dari nol. FastAPI menyediakan “plumbing” untuk tugas API umum: mendefinisikan endpoint, membaca input, mengembalikan output, menangani error, dan mengorganisir kode menjadi struktur yang mudah dipelihara.
Routing: bagaimana endpoint didefinisikan
Routing adalah bagaimana Anda memetakan URL dan metode HTTP ke potongan kode Python.
Misalnya, Anda mungkin merutekan GET /users ke “list users” dan POST /users ke “create a user.” Di FastAPI, Anda biasanya mendefinisikan route dengan dekorator seperti @app.get(...) dan @app.post(...), yang memudahkan untuk melihat apa yang ditawarkan API Anda sekilas.
Request dan response
Setiap panggilan API adalah sebuah request (apa yang dikirim klien) dan sebuah response (apa yang dikembalikan server Anda).
FastAPI membantu Anda:
- Membaca data dari path (
/users/{id}), query string (?page=2), header, dan body request - Mengembalikan respons JSON terstruktur dengan kode status yang tepat (seperti
200,201,404)
ASGI (secara garis besar)
FastAPI berjalan di ASGI, standar modern untuk server web Python. Secara praktis, ini berarti FastAPI dirancang untuk menangani banyak koneksi secara efisien, dan dapat mendukung fitur seperti koneksi jangka panjang (mis. WebSockets) saat Anda membutuhkannya—tanpa harus mengelola jaringan tingkat rendah sendiri.
Type hints: lebih dari sekadar dokumentasi
Type hints Python (seperti str, int, list[Item]) bukan hanya dokumentasi di FastAPI—mereka adalah input penting. FastAPI menggunakannya untuk memahami data yang Anda harapkan, mengonversi nilai masuk ke tipe yang tepat, dan menghasilkan API yang lebih jelas dan dapat diprediksi.
Model Pydantic untuk validasi
Model Pydantic memungkinkan Anda mendefinisikan bentuk data (field, tipe, nilai opsional) di satu tempat. FastAPI menggunakan model ini untuk memvalidasi JSON masuk, menolak input yang tidak valid dengan pesan error yang membantu, dan melakukan serialisasi output secara konsisten—sehingga API Anda berperilaku andal bahkan ketika klien mengirim data berantakan.
Bagaimana FastAPI Menangani Request dan Response
Aplikasi FastAPI dibangun di sekitar endpoint: path URL plus metode HTTP. Anggap endpoint sebagai “apa yang diminta klien” dan “bagaimana mereka memintanya.” Misalnya, klien mungkin GET /users untuk daftar pengguna, atau POST /users untuk membuat satu.
Endpoint = path + method
Sebuah path adalah route, dan method adalah aksi:
GET /products→ mengambil dataPOST /products→ mengirim data untuk membuat sesuatuPUT /products/123→ mengganti/memperbarui sesuatuDELETE /products/123→ menghapus sesuatu
Path parameters vs. query parameters
FastAPI memisahkan data yang bagian dari path dari data yang biasanya berupa filter opsional pada request.
- Path parameter: termasuk dalam struktur URL.
- Contoh:
GET /users/42→42adalah user ID.
- Contoh:
- Query parameter: ditambahkan setelah
?dan biasanya opsional.- Contoh:
GET /users?limit=10&active=true→limitdanactivemengontrol bagaimana hasil dikembalikan.
- Contoh:
Request body untuk payload JSON
Ketika klien mengirim data terstruktur (biasanya JSON), itu masuk ke request body, sering dengan POST atau PUT.
Contoh: POST /orders dengan JSON seperti { "item_id": 3, "quantity": 2 }.
Response models dan output konsisten
FastAPI bisa mengembalikan objek Python biasa (seperti dict), tetapi keunggulannya muncul saat Anda mendefinisikan response model. Model itu bertindak sebagai kontrak: field dibentuk secara konsisten, data ekstra bisa disaring, dan tipe ditegakkan. Hasilnya adalah API yang lebih bersih—klien tahu apa yang diharapkan, dan Anda menghindari respons “kejutan” yang merusak integrasi.
Async di FastAPI: Apa Itu dan Kapan Membantu
"Async" (singkatan dari asynchronous) adalah cara agar API Anda menangani banyak request secara efisien ketika banyak waktu dihabiskan untuk menunggu.
Analogi sehari-hari: menunggu I/O
Bayangkan seorang barista menerima pesanan. Jika mereka harus berdiri diam dan tidak melakukan apa-apa saat mesin espresso bekerja, mereka akan melayani lebih sedikit pelanggan. Pendekatan yang lebih baik: mulai membuat kopi, lalu ambil pesanan berikutnya selagi mesin bekerja.
Async bekerja seperti itu. Aplikasi FastAPI Anda dapat memulai operasi yang menunggu sesuatu yang lambat—mis. permintaan jaringan atau query database—dan saat menunggu, ia dapat menangani request lain yang masuk.
Kapan async paling berguna
Async sangat membantu ketika API Anda banyak melakukan I/O (input/output)—hal yang banyak menghabiskan waktu menunggu daripada “berpikir”. Contoh umum:
- Memanggil database (terutama melalui jaringan)
- Memanggil layanan eksternal (payment provider, maps, API email)
- Membaca/menulis file atau berbicara dengan object storage
Jika endpoint Anda sering menunggu operasi tersebut, async dapat meningkatkan throughput dan mengurangi kemungkinan request menumpuk ketika beban tinggi.
Kapan async tidak terlalu berpengaruh
Async bukan tombol ajaib untuk semua hal. Jika endpoint Anda kebanyakan berat CPU—seperti mengubah ukuran gambar besar, menjalankan perhitungan data science, atau mengenkripsi payload besar—async tidak akan mempercepat komputasi itu sendiri. Dalam kasus tersebut, biasanya Anda memerlukan taktik berbeda (background workers, process pool, atau skala horizontal).
Kabar baik: kode sinkron tetap berfungsi
Anda tidak perlu menulis ulang semuanya untuk memakai FastAPI. Anda bisa menulis fungsi route biasa (sinkron) dan FastAPI akan menjalankannya dengan baik. Banyak proyek mencampur kedua gaya: pertahankan endpoint sederhana sinkron, dan gunakan async def di tempat yang jelas membantunya (biasanya di sekitar panggilan database atau HTTP eksternal).
Validasi Data dan Serialisasi dengan Pydantic
Validasi adalah pos pemeriksaan antara dunia luar dan kode Anda. Ketika API menerima input (body JSON, query params, path params), Anda ingin memastikan data itu lengkap, bertipe benar, dan dalam batas wajar—sebelum menulis ke database, memanggil layanan lain, atau memicu logika bisnis.
FastAPI mengandalkan Pydantic untuk ini. Anda mendeskripsikan seperti apa “data baik” itu sekali, dan FastAPI otomatis:
- menolak input buruk sejak dini
- mengonversi tipe bila memungkinkan (mis. mengubah "42" menjadi integer)
- mengembalikan respons JSON yang konsisten (serialisasi)
Menangkap input buruk sejak dini (dengan error yang jelas)
Jika klien mengirim bentuk data yang salah, FastAPI merespons dengan 422 Unprocessable Entity dan payload error terstruktur yang menunjuk field tepat dan alasannya. Itu memudahkan pengembang klien memperbaiki request cepat, tanpa menebak-nebak.
Contoh validasi umum
Berikut model kecil yang menunjukkan field wajib, tipe, batas min/max, dan format:
from pydantic import BaseModel, EmailStr, Field
class UserCreate(BaseModel):
email: EmailStr
age: int = Field(ge=13, le=120)
username: str = Field(min_length=3, max_length=20)
- Field wajib:
emailharus ada. - Tipe:
ageharus integer. - Min/max:
agedibatasi 13–120. - Format:
EmailStrmenegakkan bentuk email yang valid.
Serialisasi: mengembalikan JSON yang bersih dan dapat diprediksi
Model yang sama dapat membentuk output, sehingga respons API Anda tidak sengaja membocorkan field internal. Anda mengembalikan objek Python; FastAPI (melalui Pydantic) mengubahnya menjadi JSON dengan nama field dan tipe yang benar.
Dokumentasi API Otomatis: OpenAPI, Swagger UI, ReDoc
Salah satu fitur paling praktis FastAPI adalah menghasilkan dokumentasi API untuk Anda secara otomatis—berdasarkan kode yang sudah Anda tulis.
OpenAPI: kontrak API yang dapat dibaca mesin
OpenAPI adalah standar untuk mendeskripsikan API dalam format terstruktur (biasanya JSON). Anggap ini sebagai “kontrak” yang menjabarkan:
- endpoint mana yang ada (mis.
GET /users/{id}) - parameter yang diterima
- bentuk request body
- format respons dan error
Karena bisa dibaca mesin, alat dapat menggunakannya untuk menghasilkan client, memvalidasi request, dan menyelaraskan tim.
Swagger UI dan ReDoc: dokumentasi interaktif yang siap pakai
FastAPI menyajikan dua halaman docs yang ramah manusia secara otomatis:
- Swagger UI (interaktif): coba endpoint langsung dari browser, isi parameter, kirim request, dan lihat respons.
- ReDoc (lebih rapi untuk referensi): halaman dokumentasi bergaya referensi yang bersih.
Di proyek FastAPI tipikal, Anda akan menemukannya di:
/docs(Swagger UI)/redoc(ReDoc)
Dokumentasi yang tetap sinkron dengan kode
Saat Anda mengubah path parameter, request model, response model, atau aturan validasi, skema OpenAPI (dan halaman docs) otomatis diperbarui. Tidak perlu langkah pemeliharaan dokumentasi terpisah.
Mengapa ini mempercepat kerja front-end dan QA
- Front-end dapat menjelajahi endpoint segera dan memahami field yang diperlukan tanpa menunggu spes manual.
- QA dapat dengan cepat menguji kasus edge (field hilang, tipe salah) dan melihat respons error yang tepat.
- Semua orang berbagi sumber kebenaran yang sama: API yang berjalan dan kontrak OpenAPI-nya.
Aplikasi FastAPI Pertama Anda (Penjelasan Konseptual)
Aplikasi FastAPI bisa sangat kecil namun terasa “nyata”. Anda mendefinisikan objek Python bernama app, menambahkan beberapa route, dan menjalankan server lokal untuk mencobanya di browser.
1) Endpoint “hello” minimal
Berikut contoh paling kecil yang berguna:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI"}
Itu saja: satu route (GET /) yang mengembalikan JSON.
2) Tambahkan endpoint create/read item sederhana (in-memory)
Agar terasa seperti API, mari simpan item dalam list. Ini bukan database—data akan reset saat server restart—tetapi sempurna untuk belajar.
from fastapi import FastAPI
app = FastAPI()
items = []
@app.post("/items")
def create_item(name: str):
item = {"id": len(items) + 1, "name": name}
items.append(item)
return item
@app.get("/items")
def list_items():
return items
Sekarang Anda bisa:
POST /items?name=Coffeeuntuk menambah itemGET /itemsuntuk mengambil daftar
3) Struktur proyek kecil yang umum
Struktur starter yang umum adalah:
main.py(membuatappdan route)requirements.txtataupyproject.toml(dependensi)
4) Menjalankan secara lokal (konseptual)
Anda biasanya:
- Pasang dependensi (FastAPI + server ASGI seperti Uvicorn)
- Mulai dev server (misalnya:
uvicorn main:app --reload) - Buka
http://127.0.0.1:8000dan coba endpoint
Dependencies dan Blok Bangunan yang Bisa Digunakan Ulang
"Dependencies" FastAPI adalah input bersama yang dibutuhkan endpoint Anda—seperti session database, user yang sedang login, pengaturan aplikasi, atau parameter query umum. Alih-alih membuat atau mem-parse ini di setiap route, Anda mendefinisikannya sekali dan membiarkan FastAPI menyediakannya di mana perlu.
Apa itu dependency (dalam istilah sederhana)
Sebuah dependency biasanya fungsi (atau kelas) yang mengembalikan nilai yang dapat dipakai endpoint Anda. FastAPI akan memanggilnya untuk Anda, menentukan apa yang dibutuhkannya (berdasarkan parameternya), dan menyuntikkan hasilnya ke fungsi operasi path.
Ini sering disebut dependency injection, tetapi Anda bisa menganggapnya sebagai: “nyatakan apa yang Anda butuhkan, dan FastAPI yang menghubungkan.”
Mengapa ini mengurangi pengulangan
Tanpa dependencies, Anda mungkin:
- Membuka/menutup koneksi database di setiap endpoint
- Mengulangi pemeriksaan autentikasi di mana-mana
- Mem-parse parameter pagination yang sama di banyak route
Dengan dependencies, Anda memusatkan logika itu. Jika nanti Anda mengubah cara membuat session DB atau memuat user saat ini, Anda memperbarui satu tempat—bukan puluhan endpoint.
Contoh dependency umum
- Session database: buat session per request dan tutup dengan andal.
- Settings/config: sediakan pengaturan berbasis environment tanpa mengoper manual.
- Pagination: gunakan ulang parsing
page/limitdan validasinya. - Auth user: ambil user saat ini dari token dan tegakkan izin.
Bagaimana dependency tersambung ke endpoint
Berikut pola konseptual yang sering terlihat di banyak aplikasi FastAPI:
from fastapi import Depends, FastAPI
app = FastAPI()
def get_settings():
return {"items_per_page": 20}
@app.get("/items")
def list_items(settings=Depends(get_settings)):
return {"limit": settings["items_per_page"]}
Anda mendeklarasikan dependency dengan Depends(...), dan FastAPI meneruskan hasilnya ke parameter endpoint. Pendekatan yang sama bekerja untuk blok yang lebih kompleks (seperti get_db() atau get_current_user()), membantu kode tetap bersih seiring bertumbuhnya API.
Dasar-dasar Keamanan: Autentikasi dan Otorisasi
FastAPI tidak “mengamankan otomatis” API Anda—Anda memilih skema dan menghubungkannya ke endpoint. Kabar baiknya: FastAPI menyediakan blok bangunan (terutama melalui sistem dependency) yang membuat pola keamanan umum mudah diimplementasikan.
Autentikasi vs. otorisasi
Autentikasi menjawab: “Siapa Anda?” Otorisasi menjawab: “Apa yang Anda boleh lakukan?”
Contoh: seorang user mungkin terautentikasi (login/token valid) tapi tetap tidak berhak mengakses route khusus admin.
Pendekatan autentikasi umum (secara garis besar)
- API keys: sederhana untuk akses service-to-service. Biasanya dikirim lewat header (mis.
X-API-Key). Atur rotasi dan revokasi. - OAuth2: standar untuk akses yang didelegasikan; umum untuk “Sign in with …” atau memisahkan otentikasi dari API.
- JWT (JSON Web Tokens): sering dipakai sebagai bearer token. Praktis untuk API tanpa state, tetapi Anda harus menangani expiry, kunci signing, dan strategi revokasi.
FastAPI mendukung pola-pola ini lewat utilitas seperti fastapi.security dan dengan mendokumentasikannya rapi di OpenAPI.
Dasar penanganan password
Jika Anda menyimpan password user, jangan pernah menyimpan plain text. Simpan hash lambat dengan salt (mis. bcrypt/argon2 melalui library terpercaya). Pertimbangkan juga rate limiting dan kebijakan penguncian akun.
Catatan berhati-hati
Keamanan soal detail: penyimpanan token, pengaturan CORS, HTTPS, manajemen rahasia, dan pemeriksaan otorisasi yang benar pada setiap endpoint sensitif. Anggap helper bawaan sebagai titik awal, dan validasi pendekatan Anda lewat review dan tes sebelum digunakan di produksi.
Testing Aplikasi FastAPI
Testing adalah tempat janji FastAPI “bekerja di mesin saya” berubah menjadi keyakinan untuk merilis. Kabar baik: FastAPI dibangun di atas Starlette, sehingga Anda mendapatkan alat testing yang kuat tanpa banyak setup.
Unit test vs integration test
Unit test berfokus pada bagian kecil: fungsi yang menghitung nilai, dependency yang memuat user, atau metode service yang berbicara ke database (sering dimock).
Integration test menjalankan API end-to-end: Anda memanggil endpoint dan memastikan respons HTTP penuh. Tes ini menangkap kesalahan routing, wiring dependency, dan masalah validasi.
Suite tes yang sehat biasanya memiliki lebih banyak unit test (cepat) dan lebih sedikit integration test (kepercayaan tinggi).
Ide TestClient
Aplikasi FastAPI dapat dites “seperti klien” menggunakan TestClient Starlette, yang mengirim request ke aplikasi Anda secara in-process—tanpa server.
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_healthcheck():
r = client.get("/health")
assert r.status_code == 200
Apa yang perlu diuji (cek praktis)
Uji hal-hal yang diandalkan pengguna dan sistem lain:
- Kode status (200 vs 201 vs 404 vs 422)
- Error validasi (field hilang, tipe salah, field ekstra)
- Bentuk respons (key ada, tipe benar, list kosong tertangani)
- Kasus tepi (hasil nol, input besar, tanggal di batas)
- Kasus auth (tidak ada token, token kadaluarsa, peran tidak cukup)
Jaga tes cepat dan dapat diulang
Gunakan data yang dapat diprediksi, isolasi layanan eksternal (mock atau gunakan DB test), dan hindari state bersama antar tes. Tes cepat akan sering dijalankan; tes lambat cenderung dilewatkan.
Mendeploy FastAPI: Opsi Praktis dan Daftar Periksa
Membawa aplikasi FastAPI online sebagian besar soal memilih “runner” yang tepat dan menambahkan beberapa keperluan produksi.
Server development vs production
Saat Anda menjalankan uvicorn main:app --reload secara lokal, Anda menggunakan setup development: auto-reload, error yang verbose, dan pengaturan yang memprioritaskan kenyamanan.
Di produksi, biasanya Anda menjalankan Uvicorn tanpa reload, sering di belakang process manager (seperti Gunicorn dengan worker Uvicorn) atau di balik reverse proxy. Tujuannya stabilitas: restart terkontrol, performa dapat diprediksi, dan default yang lebih aman.
Konfigurasi dengan environment variables
Polanya umum:
- Simpan rahasia dan nilai spesifik environment (database URL, API keys, allowed origins) di environment variables.
- Simpan default yang wajar di kode untuk penggunaan lokal.
- Load dan validasi pengaturan saat startup (sering lewat Pydantic settings).
Ini membuat satu basis kode dapat dideploy ke banyak environment tanpa mengedit file.
Target deployment umum (ringkasan cepat)
- Container (Docker/Kubernetes): populer untuk build yang dapat diulang dan scaling.
- Virtual machines: sederhana dan fleksibel; baik jika Anda mengelola server sendiri.
- Serverless: cocok untuk API kecil; perhatikan cold starts dan batas platform.
Daftar periksa praktis untuk deployment
Sebelum menyatakan “siap”, pastikan Anda memiliki:
- Logging: log terstruktur, request IDs (jika perlu), dan level log per environment.
- Health checks: endpoint seperti
/healthuntuk monitoring uptime dan load balancer. - Penanganan error: respons JSON yang konsisten; jangan bocorkan stack trace ke pengguna.
- Timeouts dan batas: ukuran body request, timeout worker, dan rate limiting bila perlu.
- Kebijakan docs: putuskan apakah Swagger UI/ReDoc diekspos publik atau dibatasi.
Jika Anda pindah dari “bekerja lokal” ke “siap kirim”, juga berguna menstandarkan bagaimana Anda menghasilkan dan mengelola kontrak API. Beberapa tim memadukan output OpenAPI FastAPI dengan workflow otomatis—mis. menghasilkan client, memvalidasi request di CI, dan deployment yang konsisten. Alat seperti Koder.ai juga bisa cocok: Anda bisa mendeskripsikan API yang Anda inginkan lewat chat, iterasi endpoint dan model dengan cepat, lalu ekspor kode sumber untuk pipeline normal review/deploy.
Pertanyaan umum
Apa itu FastAPI dalam istilah sederhana?
FastAPI adalah framework web Python untuk membangun API dengan sedikit boilerplate. Anda menulis fungsi endpoint (mis. @app.get("/users")) dan FastAPI menangani routing, parsing request, validasi, dan respons JSON.
Manfaat utamanya adalah bahwa type hints dan model Pydantic Anda berfungsi sebagai kontrak eksplisit untuk apa yang API terima dan kembalikan.
Apa itu API, dan bagaimana kaitannya dengan FastAPI?
API adalah sekumpulan URL (endpoint) yang dapat dipanggil oleh perangkat lunak lain untuk bertukar data.
Misalnya, klien bisa meminta data cuaca dengan GET /weather?city=Berlin, dan server merespons dengan JSON terstruktur. Klien tidak perlu akses langsung ke database—mereka hanya menggunakan respons API.
Bagaimana route dan metode HTTP bekerja di FastAPI?
Routing memetakan metode HTTP + path ke fungsi Python.
Di FastAPI Anda biasanya menggunakan dekorator:
@app.get("/items")untuk operasi baca@app.post("/items")untuk operasi buat@app.put("/items/{id}")untuk mengganti/memperbarui@app.delete("/items/{id}")untuk menghapus
Ini membuat permukaan API mudah dipindai langsung dari kode.
Apa perbedaan antara path parameter dan query parameter?
Path parameter adalah bagian dari struktur URL dan biasanya mengidentifikasi resource tertentu (wajib).
- Contoh Path:
GET /users/42→42adalah path parameter
Query parameter ditambahkan setelah ? dan biasanya berupa filter atau kontrol opsional.
- Contoh Query:
GET /users?limit=10&active=true→limit,activeadalah query parameter
Bagaimana FastAPI memvalidasi data dengan Pydantic?
Model Pydantic mendefinisikan bentuk dan aturan data (tipe, field wajib, batasan). FastAPI menggunakannya untuk:
- Memvalidasi request masuk
- Mengubah tipe bila memungkinkan (mis. "42" menjadi integer)
- Mengembalikan respons JSON yang konsisten dan terstruktur
Jika validasi gagal, FastAPI biasanya merespons dengan 422 Unprocessable Entity dan rincian field yang bermasalah.
Bagaimana FastAPI menghasilkan dokumentasi API otomatis?
FastAPI otomatis menghasilkan skema OpenAPI dari endpoint, type hints, dan model Anda.
Anda biasanya mendapatkan dokumentasi interaktif gratis:
- Swagger UI di
/docs - ReDoc di
/redoc
Karena skema diturunkan dari kode, dokumentasi akan selalu sinkron saat Anda mengubah parameter dan model.
Kapan sebaiknya saya menggunakan endpoint async di FastAPI?
Gunakan async def ketika endpoint Anda banyak menghabiskan waktu menunggu I/O (panggilan database, HTTP eksternal, penyimpanan objek/file).
Gunakan def biasa ketika:
- Kodenya sederhana dan sinkron
- Anda memanggil library yang tidak mendukung async
- Pekerjaan bersifat CPU-bound (async tidak mempercepat komputasi)
Bercampurnya endpoint sync dan async dalam satu aplikasi adalah hal yang umum.
Apa itu dependencies di FastAPI, dan mengapa berguna?
Dependencies adalah “blok bangunan” yang dapat digunakan ulang dan diinjeksikan ke endpoint melalui Depends().
Mereka umum dipakai untuk:
- Session database per request
- Auth: memuat user saat ini dan menegakkan izin
- Parsing query bersama (pagination, filter)
- Pengaturan aplikasi / config
Ini mengurangi pengulangan dan memusatkan logika lintas-lintas sehingga perubahan cukup dilakukan di satu tempat.
Dasar-dasar keamanan apa yang harus saya tahu saat membangun API FastAPI?
FastAPI tidak mengamankan API Anda secara otomatis—Anda memilih skema dan menghubungkannya ke endpoint. Pola umum meliputi:
- API keys (sering lewat header)
- OAuth2
- Token Bearer (mis. JWT)
Hal dasar yang harus diingat:
- Jangan menyimpan password dalam plaintext; gunakan hash lambat dengan salt (mis. bcrypt/argon2)
- Pisahkan autentikasi (siapa Anda) dari otorisasi (apa yang boleh Anda lakukan)
- Gunakan HTTPS dan periksa pengaturan CORS untuk klien browser
Bagaimana cara saya mengetes dan menerapkan aplikasi FastAPI secara praktis?
Untuk testing, Anda bisa menggunakan TestClient dari FastAPI/Starlette untuk memanggil API dalam proses (tanpa server).
Hal praktis yang perlu diuji:
- Status code (200/201/404/422)
- Perilaku validasi (field hilang, tipe salah)
- Bentuk respons (field hadir, tipe benar)
- Skenario autentikasi (tanpa token, token kadaluarsa, peran tidak cukup)
Untuk deployment, jalankan server ASGI (mis. Uvicorn; kadang bersama Gunicorn atau di balik reverse proxy) dan tambahkan kebutuhan produksi seperti logging, health checks (/health), timeout, dan konfigurasi berbasis lingkungan.