api-playground/README.md

7.4 KiB

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 type dan service

📋 Requirements

Pastikan sudah terinstall:

  • Python 3
  • pip3

🛠️ 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.

python3 -m venv venv

3. Aktifkan Virtual Environment

Di Linux/macOS:

source venv/bin/activate

Di Windows:

venv\Scripts\activate

4. Install Dependencies

pip install -r requirements.txt

▶️ Menjalankan Aplikasi

Jalankan server dengan perintah:

python app.py

Server akan berjalan di:

http://localhost:8080

atau:

http://0.0.0.0:8080

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:

  • id
  • action=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:

  1. Mengisi token Bearer
  2. Melihat status autentikasi
  3. Mengisi form request
  4. Mengirim request ke endpoint
  5. 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.

🤝 Kontribusi

Untuk menambahkan fitur baru:

  1. Buat perubahan pada kode
  2. Jalankan server untuk memastikan tidak ada error
  3. Tes endpoint menggunakan playground UI atau curl
  4. Dokumentasikan perubahan jika endpoint atau behavior berubah