Section API Development telah membedah tiap komponen secara terpisah: model Pydantic, status code, dependency injection, sampai testing dengan TestClient. Sekarang kita merangkainya menjadi satu proyek utuh yang bisa dipakai orang lain: REST API manajemen tugas — API yang menyimpan daftar tugas, menerima tugas baru, menandai tugas selesai, dan menghapus tugas, lengkap dari struktur proyek sampai image Docker.
API yang Akan Kita Bangun #
Satu tugas hanya punya tiga field: id, judul, dan selesai. Kesederhanaan ini disengaja agar fokus kita tetap pada alur kerja REST, bukan pada kompleksitas domain. Kontrak endpoint-nya:
| Metode | Path | Fungsi | Status sukses |
|---|---|---|---|
GET | /health | Cek kesehatan service | 200 |
GET | /tugas | Daftar seluruh tugas | 200 |
POST | /tugas | Buat tugas baru | 201 |
GET | /tugas/{id} | Ambil satu tugas | 200 |
PATCH | /tugas/{id} | Perbarui sebagian field | 200 |
DELETE | /tugas/{id} | Hapus satu tugas | 204 |
Seluruh kode sumber tiap tahap tersedia pada bagian Berkas Sumber di bawah halaman setiap bagian. Proyek dibangun bertahap, sehingga setiap bagian berisi berkas yang berubah pada tahap tersebut saja.
Perilaku yang Diharapkan #
Sebelum menulis kode, mari kita tetapkan dulu hasil akhir yang dituju. Sesi berikut adalah percakapan sesungguhnya dengan API yang akan kita bangun — klien mengirim satu tugas lewat POST, lalu membaca kembali seluruh daftarnya:
curl -X POST http://127.0.0.1:8000/tugas \
-H "Content-Type: application/json" \
-d '{"judul": "Belajar FastAPI"}'
curl http://127.0.0.1:8000/tugasOutput yang Dihasilkan:
{"id":1,"judul":"Belajar FastAPI","selesai":false}
[{"id":1,"judul":"Belajar FastAPI","selesai":false}]Tugas baru selalu lahir dengan selesai bernilai false; id ditetapkan oleh server, bukan oleh klien. Seluruh data tersimpan di berkas tugas.db, sehingga daftar tugas bertahan melewati restart.
Teknologi dan Prasyarat #
Kita memakai empat komponen yang semuanya sudah dibahas di chapter teori:
- FastAPI sebagai framework — materi chapter Membuat API dengan FastAPI,
- SQLite dari standard library sebagai penyimpanan — chapter SQLite dengan Python dan CRUD dengan SQLite,
- pytest bersama
TestClientsebagai alat uji — chapter API Testing, - Docker sebagai cara mengemas aplikasi — chapter Containerization dengan Docker.
Siapkan juga virtual environment aktif seperti pada chapter Membuat Virtual Environment; semua perintah pada proyek ini dijalankan dari direktori root proyek.
Tahapan Pengerjaan #
Proyek dikerjakan dalam enam bagian berurutan. Setiap bagian diakhiri dengan aplikasi yang tetap bisa dijalankan:
- Bagian 1: Fondasi API — struktur proyek,
pyproject.toml, aplikasi minimal, dan cara menjalankannya. - Bagian 2: Request dan Response — model Pydantic serta endpoint
POST,GETper id, danDELETEdengan penyimpanan in-memory. - Bagian 3: Persistensi Database — penggantian penyimpanan in-memory dengan SQLite.
- Bagian 4: Validasi dan Error Handling — status
404,422,400, dan pembaruan parsial lewatPATCH. - Bagian 5: Testing API — berkas test pytest dengan database terisolasi.
- Bagian 6: Konfigurasi dan Deployment — environment variable, dependensi terkunci, dan Dockerfile.
Mulailah dari Bagian 1 dan pertahankan urutannya: setiap bagian membangun di atas berkas dari bagian sebelumnya.
Rakit struktur proyek, pyproject.toml, dan aplikasi FastAPI minimal yang berjalan di uvicorn.
Buka → # Bagian 2: Request dan ResponseDefinisikan model Pydantic lalu bangun endpoint POST, GET, dan DELETE dengan response_model.
Buka → # Bagian 3: Persistensi DatabaseGanti penyimpanan in-memory dengan SQLite melalui dependency koneksi per request.
Buka → # Bagian 4: Validasi dan Error HandlingTangani tugas yang tidak ada dengan 404, tolak input tidak valid dengan 422, dan tambahkan PATCH.
Buka → # Bagian 5: Testing APIUji seluruh endpoint dengan pytest, TestClient, dan fixture database terisolasi.
Buka → # Bagian 6: Konfigurasi dan DeploymentPin dependensi, konfigurasi via environment variable, lalu kemas API ke dalam image Docker.
Buka →