| __pycache__ | ||
| templates | ||
| .gitignore | ||
| API_DOCS.md | ||
| app.py | ||
| db.py | ||
| enroll.db | ||
| README.md | ||
| requirements.txt | ||
API Playground
Proyek sederhana untuk playground API enrollment berbasis Python Bottle dan SQLite.
Aplikasi ini menyediakan halaman UI playground dan API endpoint untuk mengelola data enrollment secara CRUD.
🚀 Fitur
- Server API berbasis Bottle
- Database SQLite
- UI playground untuk testing endpoint langsung dari browser
- Autentikasi sederhana menggunakan Bearer Token
- Validasi nilai
typedanservice
📋 Requirements
Pastikan sudah terinstall:
- Python 3
- pip
- Git
Catatan: Di Windows, umumnya gunakan
pyuntuk menjalankan Python danpy -m pipuntuk menjalankan pip, karena Python installer resmi Windows biasanya mendaftarkan Python melalui Python Launcher (py).
Untuk Pengguna Windows
Sebelum menjalankan project, install tools berikut:
-
Python 3
- Download installer Python terbaru dari: https://www.python.org/downloads/windows/
- Saat instalasi, centang opsi Add python.exe to PATH
- Pastikan
pipikut terinstall bersama Python
-
Git for Windows
- Download dari: https://git-scm.com/download/win
- Gunakan opsi default saat instalasi
-
Terminal
- Bisa menggunakan Command Prompt, PowerShell, atau Windows Terminal
-
Text Editor / IDE (opsional)
- Visual Studio Code, PyCharm, atau editor lain sesuai preferensi
Catatan: SQLite sudah tersedia sebagai library bawaan Python, jadi tidak perlu install SQLite secara terpisah.
🛠️ Instalasi
1. Clone / Masuk ke Folder Project
cd api-playground
2. Buat Virtual Environment
Disarankan menggunakan virtual environment agar dependency tidak bercampur dengan environment global.
Di Linux/macOS:
python3 -m venv venv
Di Windows:
py -m venv venv
3. Aktifkan Virtual Environment
Di Linux/macOS:
source venv/bin/activate
Di Windows:
venv\Scripts\activate
4. Install Dependencies
Di Linux/macOS:
pip install -r requirements.txt
Di Windows:
py -m pip install -r requirements.txt
▶️ Menjalankan Aplikasi
Jalankan server dengan perintah:
Di Linux/macOS:
python app.py
Di Windows:
py app.py
Server akan berjalan di:
http://localhost:8080
atau:
http://0.0.0.0:8080
Jika port 8080 sudah terpakai, gunakan opsi --port untuk mengganti port server.
Di Linux/macOS:
python app.py --port 5000
Di Windows:
py app.py --port 5000
Server kemudian dapat diakses di:
http://localhost:5000
Untuk mengganti host dan port sekaligus:
Di Linux/macOS:
python app.py --host 127.0.0.1 --port 5000
Di Windows:
py app.py --host 127.0.0.1 --port 5000
Jika kode diubah, server akan otomatis restart karena menggunakan mode debug=True dan reloader=True.
🔐 Autentikasi
Semua request ke endpoint API wajib menyertakan header:
Authorization: Bearer secret123
Token default disimpan di app.py pada variabel:
API_TOKEN = "secret123"
Jika tidak menyertakan token atau token salah, API akan mengembalikan response 401 Unauthorized.
📡 Daftar Endpoint
| Endpoint | Method | Auth | Fungsi |
|---|---|---|---|
/ |
GET |
Tidak | Halaman playground UI |
/api/enroll |
GET |
Ya | List semua enrollment |
/api/enroll?id=<id> |
GET |
Ya | Mendapatkan detail enrollment berdasarkan ID |
/api/enroll |
POST |
Ya | Tambah, edit, atau hapus enrollment |
🧬 Database Schema
Tabel: enroll
| Kolom | Tipe | Keterangan |
|---|---|---|
id |
INTEGER | Primary key, auto-increment |
type |
TEXT | Tipe enrollment, hanya boleh Annually atau Monthly |
service |
TEXT | Paket layanan, hanya boleh Lite, Value, atau Pro |
user |
TEXT | Nama pengguna |
🧪 Penggunaan Endpoint
1. List Semua Enrollment
Request
curl -H "Authorization: Bearer secret123" \
http://localhost:8080/api/enroll
Response
{
"data": [
{
"id": 2,
"type": "Monthly",
"service": "Lite",
"user": "bob"
},
{
"id": 1,
"type": "Annually",
"service": "Pro",
"user": "alice"
}
]
}
2. Detail Enrollment Berdasarkan ID
Request
curl -H "Authorization: Bearer secret123" \
"http://localhost:8080/api/enroll?id=1"
Response
{
"data": {
"id": 1,
"type": "Annually",
"service": "Pro",
"user": "alice"
}
}
Jika ID tidak ditemukan:
{
"error": "not found"
}
3. Tambah Enrollment Baru
Endpoint POST /api/enroll dapat menerima data dalam format form-urlencoded atau JSON.
Menggunakan Form Data
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-d "type=Annually" \
-d "service=Pro" \
-d "user=alice"
Menggunakan JSON
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-H "Content-Type: application/json" \
-d '{
"type": "Annually",
"service": "Pro",
"user": "alice"
}'
Response
{
"message": "created",
"id": 1
}
4. Edit Enrollment
Untuk melakukan edit, kirim field id bersama data baru.
Menggunakan Form Data
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-d "id=1" \
-d "type=Monthly" \
-d "service=Value" \
-d "user=bob"
Menggunakan JSON
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-H "Content-Type: application/json" \
-d '{
"id": 1,
"type": "Monthly",
"service": "Value",
"user": "bob"
}'
Response
{
"message": "updated",
"id": 1
}
5. Hapus Enrollment
Untuk menghapus data, gunakan POST /api/enroll dengan field:
idaction=remove
Menggunakan Form Data
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-d "id=1" \
-d "action=remove"
Menggunakan JSON
curl -X POST http://localhost:8080/api/enroll \
-H "Authorization: Bearer secret123" \
-H "Content-Type: application/json" \
-d '{
"id": 1,
"action": "remove"
}'
Response
{
"message": "removed",
"id": 1
}
🧠 Logika POST /api/enroll
POST /api/enroll
│
├── action = "remove" → hapus data, wajib menyertakan id
├── ada field id → edit data
└── tidak ada field id → tambah data baru
Untuk tambah dan edit, field berikut wajib dikirim:
| Field | Wajib | Keterangan |
|---|---|---|
type |
Ya | Harus Annually atau Monthly |
service |
Ya | Harus Lite, Value, atau Pro |
user |
Ya | Nama pengguna |
⚠️ Validasi
Nilai yang diterima API:
type:
- Annually
- Monthly
service:
- Lite
- Value
- Pro
Jika nilai tidak sesuai, API akan mengembalikan error 400 Bad Request.
Contoh error:
{
"error": "type must be one of: Annually, Monthly"
}
{
"error": "service must be one of: Lite, Value, Pro"
}
🎮 Menggunakan Playground UI
Setelah server berjalan, buka browser ke:
http://localhost:8080
Halaman playground dapat digunakan untuk:
- Mengisi token Bearer
- Melihat status autentikasi
- Mengisi form request
- Mengirim request ke endpoint
- Melihat response JSON secara langsung
🧾 Contoh Response Error
| Status | Kondisi | Response |
|---|---|---|
401 |
Tidak menyertakan Authorization header | {"error": "missing or invalid Authorization header"} |
401 |
Token tidak valid | {"error": "invalid token"} |
400 |
Field wajib kosong | {"error": "type, service, user are required"} |
400 |
type tidak valid |
{"error": "type must be one of: Annually, Monthly"} |
400 |
service tidak valid |
{"error": "service must be one of: Lite, Value, Pro"} |
400 |
id bukan integer |
{"error": "id must be an integer"} |
404 |
Data tidak ditemukan | {"error": "not found"} |
📁 Struktur Project
api-playground/
├── app.py # Routing API dan konfigurasi aplikasi
├── db.py # Koneksi dan operasi database SQLite
├── enroll.db # Database SQLite
├── requirements.txt # Dependency Python
├── templates/
│ └── playground.html # UI playground
└── README.md # Dokumentasi project
🔧 Catatan
- Token default hanya untuk development. Untuk production, gunakan token yang lebih aman dan simpan melalui environment variable.
- Database SQLite disimpan dalam file
enroll.db. - Mode debug dan reloader aktif saat menjalankan
python app.py/py app.py.
🤝 Kontribusi
Untuk menambahkan fitur baru:
- Buat perubahan pada kode
- Jalankan server untuk memastikan tidak ada error
- Tes endpoint menggunakan playground UI atau
curl - Dokumentasikan perubahan jika endpoint atau behavior berubah