API Overview

Struktur endpoint yellow-bank-soal, autentikasi, konvensi response, dan status implementasi.

API Overview

Source: backend/app/main.py, backend/app/api/v1/

Base URL

text
/api/v1

Semua endpoint (kecuali import-export) berada di bawah prefix ini. Default saat dev: http://localhost:8000/api/v1.

Autentikasi

Bearer Token (App Access Token)

Didapat dari POST /api/v1/wordpress/verify_session. Dipakai sebagai:

http
Authorization: Bearer {app_access_token}
X-Website-ID: 1

Header Wajib

HeaderContohTujuan
AuthorizationBearer eyJ...Identitas user (via app access token)
X-Website-ID1Multi-tenant isolation — wajib di semua request

Role

RoleAkses
studentEndpoint session ujian sendiri
adminEndpoint admin (CRUD tryout, AI, import)
system_adminCross-tenant (super-admin)

Grup Endpoint

PrefixTagTujuanStatus
/sessionsessionsLifecycle sesi ujian⚠️ Partial (lihat API → Session)
/session/adaptive/*adaptiveEndpoint CAT per-soal🚧 Planned (Gap 1 & 2)
/tryouttryoutsKonfigurasi & kalibrasi✅ Implemented
/wordpresswordpressAuth WP + sync user✅ Implemented
/admin/aiai-generationGenerate soal AI✅ Implemented
/api/v1/import-exportimport-exportImpor/ekspor Excel & JSON✅ Implemented
/reportsreportsLaporan⚠️ Partial
/adminadminCRUD admin lainnya✅ Implemented

Status Implementasi

Beberapa endpoint di tabel ini belum ada di app — terutama yang berkaitan dengan Pola B (1-AJAX-per-soal). Untuk detail gap dan rencana implementasi:

Gap Analysis Integrasi Pola B

Tabel-tabel per grup endpoint menandai status tiap endpoint:

  • Implemented — endpoint ada dan berfungsi
  • 🚧 Planned — belum ada, dijelaskan di Gap Analysis
  • ⚠️ Partial — ada tapi perlu refactor untuk mendukung Pola B

Konvensi Response

Sukses

json
{
  "field1": "value",
  "field2": 123
}

FastAPI auto-generate schema dari Pydantic model. Lihat /docs (Swagger UI) atau /redoc untuk detail.

Error

json
{
  "detail": "Human-readable error message"
}

HTTP status code mengikuti standar:

CodeArti
200OK
201Created
400Bad Request (validasi input gagal)
401Unauthorized (token invalid/expired)
403Forbidden (role tidak cukup)
404Not Found
409Conflict (duplicate / wrong state)
422Unprocessable Entity (Pydantic validation)
429Rate Limited
500Internal Server Error

Pagination

Endpoint list pakai offset/limit (atau DataTables untuk admin). Contoh:

text
GET /api/v1/wordpress/website/1/users?page=1&per_page=100

Response:

json
{
  "data": [...],
  "page": 1,
  "per_page": 100,
  "total": 1234
}

Rate Limiting

🚧 Planned — belum diimplementasi. Rencana: Redis-based limiter per-sesi (lihat Gap Analysis Gap 8).

Versioning

Sekarang pakai prefix /api/v1. Strategi future (kalau ada breaking change):

  • Tambah prefix /api/v2 untuk endpoint baru
  • Pertahankan /api/v1 selama transition period
  • Deprecation header Sunset: Sat, 25 Jul 2026 00:00:00 GMT

OpenAPI / Swagger

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc
  • OpenAPI JSON: http://localhost:8000/openapi.json

Bacaan Lanjutan

Last updated Jul 25, 2026