A. Web Assessment System API Documentation
Bagian ini menjelaskan dokumentasi API pada sistem web assessment (platform ujian online). API ini mendukung operasi CRUD dan service lainnya.
Base URL
Semua permintaan API menggunakan URL berikut sebagai basis:
https://xx.xx.xx.xxx/api/v1
1. Autentikasi
1.1 Mendapatkan Token CSRF
Endpoint: GET /auth/csrf-token
Deskripsi: Mendapatkan token CSRF yang akan digunakan untuk permintaan selanjutnya. Token ini disimpan dalam cookie x-xsrf-token dengan pengaturan secure untuk memastikan cookie hanya dikirim melalui koneksi HTTPS.
Contoh Response (200 OK):
{
"csrfToken": "value"
}
Cookies:
x-xsrf-token: Disimpan dengansecure: true,httpOnly: true.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/auth/csrf-token
1.2 Login Peserta Ujian
Endpoint: POST /auth/login
Deskripsi: Gunakan endpoint ini untuk autentikasi peserta ujian menggunakan Nama Lengkap dan NRP. Setelah login berhasil, token JWT disimpan dalam cookie HTTP-only dengan pengaturan secure, memastikan hanya dikirim melalui HTTPS.
Request:
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"name": "johndoe",
"registeredNumber": "12345678"
}
Contoh Response (200 OK):
{
"name": "John Doe",
"eventId": 1,
"eventTitle": "Ujian Nasional",
"eventSlug": "ujian-nasional",
"id": 123,
"examRegisteredNumber": "12304567892024"
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/auth/login \
-H 'Content-Type: application/json' \
-H 'Cookie: x-xsrf-token=<token-csrf>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"name": "johndoe", "registeredNumber": "password123"}'
Response Cookies:
sl_token: Token autentikasi JWT disimpan dengansecure: true,httpOnly: true.
1.3 Registrasi Pengguna Baru
Endpoint: POST /auth/register
Deskripsi: Gunakan endpoint ini untuk registrasi pengguna baru. CAPTCHA diperlukan untuk validasi. Setelah registrasi, pengguna akan otomatis login dan token JWT disimpan dalam cookie HTTP-only dengan pengaturan secure.
Request:
Headers:
X-XSRF-TOKEN: <token-csrf>
Query Parameters:
- token (optional): Token opsional untuk registrasi otomatis di suatu even ujian.
Body:
{
"name": "Jane Doe",
"registeredNumber": "12345678",
"rankId": 1,
"positionId": 1,
"unitId": 1,
"captcha": "1234"
}
Contoh Response (201 Created):
{
"id": 1,
"name": "Jane Doe",
"registeredNumber": "12345678",
"rankId": 1,
"positionId": 1,
"unitId": 1,
"accessCode": "unique_access_code"
}
Response Cookies:
sl_token: Response Token autentikasi disimpan dengansecure: truedanhttpOnly: true(jika terdapat token untuk registrasi otomatis ke event ujian).
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/auth/register?token=event_token \
-H 'Content-Type: application/json' \
-H 'Cookie: x-xsrf-token=<token-csrf>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{""name": "Jane Doe","registeredNumber": "12345678","rankId": 1,"positionId": 1,"unitId": 1,"captcha": "1234"}'
1.4 Logout Pengguna
Endpoint: GET /auth/logout
Deskripsi: Gunakan endpoint ini untuk mengeluarkan pengguna dari sistem dengan menghapus cookie autentikasi.
Contoh Response (200 OK):
{
"message": "Logout successful"
}
Cookies:
sl_token: Cookie dihapus dengansecure: true.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/auth/logout \
2.Peserta Ujian
2.1. Data Current Participant
Endpoint: GET /participant
Description: Retrieve the current participant's data based on the provided session token.
Request:
Cookies:
sl_token (required): The session token used to identify the participant.
Contoh Response (200):
{
"title": "Online English Skill Assessment",
"date": "2024-08-05T17:00:00.000Z",
"rule": "ibt",
"startTime": "02:36:00",
"endTime": "02:39:00",
"sections": [Object Data]
}
Contoh Response (400):
{
"statusCode": 400,
"message": "Invalid token or participant ID",
"error": "Bad Request"
}
Status Code (404 Not Found):
{
"statusCode": 404,
"message": "Participant not found",
"error": "Not Found"
}
3. Event
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie sl_token.
3.1. Mendapatkan Data Simulation
Endpoint: GET /event/simulation
Deskripsi: Mendapatkan data simulasi dari event. Jika data simulasi tidak tersedia dalam cache, data akan diambil dari layanan event dan disimpan ke dalam cache untuk permintaan selanjutnya.
Contoh Response (200 OK):
{
"id": 1,
"name": "Simulation Test Package",
"sections": [Object Data]
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/event/simulation
3.2 Get Event for Signed-In Participant
Endpoint: GET /event
Deskripsi: Mendapatkan data event untuk peserta ujian yang sudah login berdasarkan token yang ada di cookie. Jika parameter sectionId disertakan, hanya data dari section tersebut yang akan dikembalikan.
Request:
Query Parameters:
sectionId(optional): ID section yang ingin diambil datanya.
Contoh Response (200 OK):
{
"id": 1,
"eventTitle": "Ujian Nasional",
"sections": [Object Data]
}
Cookies:
sl_token: Token autentikasi JWT dari peserta ujian.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/event?sectionId=1 \
-b "sl_token=your-jwt-token"
3.3 Get Sections Data on Event Test
Endpoint: GET /event/sections
Deskripsi: Mendapatkan data sections pada sebuah event ujian berdasarkan ID peserta yang sudah login. Informasi ini diambil menggunakan token yang tersimpan dalam cookie.
Request:
Contoh Response (200 OK):
{
"id": 1,
"eventTitle": "Ujian Nasional",
"sections": [
{
"id": 1,
"title": "Section 1",
"questions": [Object Data]
}
]
}
Cookies:
sl_token: Token autentikasi JWT dari peserta ujian.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/event/sections \
-b "sl_token=your-jwt-token"
4. Test Responses
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie sl_token.
4.1 Submit Test Response
Endpoint: POST /test-responses
Deskripsi: Mengirimkan satu test response dari peserta ujian. Token peserta ujian diambil dari cookie sl_token dan digunakan untuk memvalidasi identitas.
Request Body:
{
"questionId": 101,
"answer": "Paris",
}
Cookies:
sl_token: Token autentikasi JWT dari peserta ujian.
Headers:
X-XSRF-TOKEN: <token-csrf>
Contoh Response (201 Created):
{
"id": 1,
"questionId": 101,
"answer": "Paris",
"participantId": 5,
"packageId": 1,
"eventId": 10,
"score": 10,
"createdAt": "2024-09-13T10:00:00Z",
"updatedAt": "2024-09-13T10:00:00Z"
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/test-responses \
-H 'X-CSRF-TOKEN: <your-csrf-token>' \
-H 'Content-Type: application/json' \
--cookie "sl_token=<your-jwt-token>" \
-d '{
"questionId": 101,
"answer": "Paris",
}'
4.2 Submit Bulk Test Responses
Endpoint: POST /test-responses/bulk
Deskripsi: Mengirimkan beberapa test responses sekaligus dari peserta ujian. Token peserta ujian diambil dari cookie sl_token dan digunakan untuk memvalidasi identitas. Data responses dikirimkan dalam bentuk array.
Request Body:
[
{
"questionId": 101,
"answer": "Paris",
},
{
"questionId": 102,
"answer": "Berlin",
}
]
Query Parameters:
status(optional): Status tambahan yang ingin disertakan dalam submit bulk responses, misalnya completed.
Cookies:
sl_token: Token autentikasi JWT dari peserta ujian.
Headers:
X-XSRF-TOKEN: <token-csrf>
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/test-responses/bulk?status=completed \
-H 'X-CSRF-TOKEN: <your-csrf-token>' \
-H 'Content-Type: application/json' \
--cookie "sl_token=<your-jwt-token>" \
-d '[
{
"questionId": 101,
"answer": "Paris",
},
{
"questionId": 102,
"answer": "Berlin",
}
]'
4.3 Error Handling
Kode status yang umum digunakan dalam API ini meliputi:
| Status Code | Deskripsi |
|---|---|
| 200 OK | Permintaan berhasil dijalankan. |
| 400 Bad Request | Data permintaan tidak valid. |
| 401 Unauthorized | Token autentikasi tidak valid. |
| 404 Not Found | Resource yang diminta tidak ditemukan. |
| 500 Internal Server Error | Kesalahan server yang tidak terduga. |
5. Media
5.1 Upload Video
Endpoint: POST /video
Deskripsi: Gunakan endpoint ini untuk mengunggah file video. Hanya video dengan format webm dan ukuran maksimum 10 MB yang diizinkan. Video ini diunggah dan diproses berdasarkan opsi yang diberikan.
Request: Headers:
X-XSRF-TOKEN: <token-csrf>
Content-Type: multipart/form-data
Query Parameters:
option(optional): Parameter opsional untuk menentukan opsi penanganan video khusus.
Body (multipart/form-data):
file: File video yang akan diunggah.
Cookies:
sl_token: Token autentikasi yang digunakan untuk mengidentifikasi peserta yang mengunggah video.
Contoh Response (201 Created):
{
"message": "Video uploaded successfully"
}
Contoh Kesalahan (400 Bad Request):
{
"statusCode": 400,
"message": "Invalid file type or file size exceeds limit",
"error": "Bad Request"
}
Cookies:
sl_token: Digunakan untuk autentikasi peserta.
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/video \
-H 'Content-Type: multipart/form-data' \
-H 'Cookie: sl_token=<your_token>' \
-H 'Cookie: x-xsrf-token=<csrf>' \
-F 'file=@video.webm' \
--form 'option=compress'
6. Audio
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie sl_token.
6.1 Stream Audio
Endpoint: GET /audio
Deskripsi: Mengalirkan (streaming) file audio berdasarkan parameter query audio. Nama atau path file audio harus diberikan melalui query string.
Query Parameters:
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
id |
String | File Path Audio | Ya |
Headers:
X-XSRF-TOKEN: <token-csrf>
Cookies:
- sl_token: Token autentikasi JWT dari pengguna.
Responses:
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/audio?audio=example.mp3' \
--cookie "sl_token=<your-jwt-token>"
7. Units/Satuan
7.1 Mendapatkan Semua Unit/Satuan
Endpoint: GET /units
Deskripsi: Mengambil daftar semua unit yang tersedia dalam sistem.
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/units'
Response Contoh (200):
[
{
"id": 10,
"title": "Komando Operasi Angkatan Udara (Koopsau)",
"abbr": "Koopsau"
},
{
"id": 11,
"title": "Komando Pendidikan dan Latihan Angkatan Udara (Kodiklatau)",
"abbr": "Kodiklatau"
}
]
7.2 Mendapatkan Unit Berdasarkan ID
Endpoint: GET /units/{id}
Deskripsi: Mengambil informasi unit berdasarkan id yang diberikan.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari unit yang ingin diambil. |
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/units/1' \
Response Contoh (200):
{
"id": 11,
"title": "Komando Pendidikan dan Latihan Angkatan Udara (Kodiklatau)",
"abbr": "Kodiklatau"
}
Response Contoh (404):
{
"statusCode": 404,
"message": "Unit with ID 1 not found",
"error": "Not Found"
}
7.3 Error Handling
Kode status yang umum digunakan dalam API ini meliputi:
| Status Code | Deskripsi |
|---|---|
| 200 OK | Permintaan berhasil dijalankan. |
| 400 Bad Request | Data permintaan tidak valid. |
| 401 Unauthorized | Token autentikasi tidak valid. |
| 404 Not Found | Resource yang diminta tidak ditemukan. |
| 500 Internal Server Error | Kesalahan server yang tidak terduga. |
8. Position/Jabatan
8.1 Mendapatkan Semua Unit/Satuan
Endpoint: GET /positions
Deskripsi: Mengambil daftar semua jabatan yang tersedia dalam sistem.
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/positions'
Response Contoh (200):
[
{
"id": 1,
"title": "Komandan Satuan Pemeliharaan (KSP)",
"abbr": "KSP"
},
{
"id": 2,
"title": "Komandan Satuan Radar (KSR)",
"abbr": "KSR"
},
{
"id": 3,
"title": "Komandan Satuan Pendidikan (KSPd)",
"abbr": "KSPd"
}
]
8.2 Mendapatkan Position/Jabatan Berdasarkan ID
Endpoint: GET /posistions/{id}
Deskripsi: Mengambil informasi jabatan berdasarkan id yang diberikan.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari position yang ingin diambil. |
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/positions/1' \
Response Contoh (200):
{
"id": 2,
"title": "Komandan Satuan Radar (KSR)",
"abbr": "KSR"
}
Response Contoh (404):
{
"statusCode": 404,
"message": "Position with ID 1 not found",
"error": "Not Found"
}
9. Pangkat
9.1 Mendapatkan Semua Pangkat
Endpoint: GET /ranks
Deskripsi: Mengambil daftar semua pangkat yang tersedia dalam sistem.
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/ranks'
Response Contoh (200):
[
{
"id": 1,
"title": "Prajurit Dua"
},
{
"id": 2,
"title": "Prajurit Satu"
}
]
8.2 Mendapatkan Pangkat Berdasarkan ID
Endpoint: GET /ranks/{id}
Deskripsi: Mengambil informasi pangkat berdasarkan id yang diberikan.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari pangkat yang ingin diambil. |
Contoh Request (Curl):
curl -X GET 'https://xx.xx.xx.xxx/v1/ranks/1' \
Response Contoh (200):
{
"id": 2,
"title": "Prajurit Satu"
}
Response Contoh (404):
{
"statusCode": 404,
"message": "Rank with ID 1 not found",
"error": "Not Found"
}
9. Kode Status
Kode status yang umum digunakan dalam API ini meliputi:
| Status Code | Deskripsi |
|---|---|
| 200 OK | Permintaan berhasil dijalankan. |
| 400 Bad Request | Data permintaan tidak valid. |
| 401 Unauthorized | Token autentikasi tidak valid. |
| 404 Not Found | Resource yang diminta tidak ditemukan. |
| 500 Internal Server Error | Kesalahan server yang tidak terduga. |