Tổng quan API của cổng
API JSON để hệ thống không dùng OneRoster đọc và gửi sinh viên, đợt thực tập, ghi danh.
Không phải hệ thống nào của trường cũng hỗ trợ OneRoster. API của cổng (v1) là một API REST JSON đơn giản để phần mềm của trường đọc và gửi dữ liệu thực tập: sinh viên, đợt thực tập, ghi danh vào đợt, khoá tài khoản; đọc kết quả thực tập và doanh nghiệp đã duyệt. API này cũng nhận gói CSV OneRoster cho trường xuất được gói nhưng không có API OneRoster.
Hệ thống đã hỗ trợ OneRoster 1.2 thì nên dùng API OneRoster để đọc. Hai API dùng chung kết nối, quyền và giới hạn.
Đặc điểm chính
- Địa chỉ gốc:
https://<trường>.<tên-miền-nền-tảng>/integration/v1. Trường được xác định theo tên miền; mã của trường nào chỉ dùng được ở trường đó. - Định dạng: JSON UTF-8. Thời điểm theo ISO 8601 (UTC); ngày (
startDate,endDate) dạngYYYY-MM-DDtheo giờ Việt Nam. - Lỗi: theo Problem Details (RFC 9457), kiểu
application/problem+json. Xem Giới hạn và lỗi. - Đặc tả máy đọc được: OpenAPI 3.1 tại
/integration/v1/openapi.json.
Xác thực
Mọi lời gọi gửi tiêu đề Authorization: Bearer <mã>. Nhà trường tạo kết nối ở trang Kết nối hệ thống và chọn một trong hai loại:
| Loại kết nối | Cách dùng | Phù hợp |
|---|---|---|
| Mã truy cập | Một mã dạng ttdn_pat_... gửi thẳng trong mỗi lời gọi. Có thể đặt thời hạn (30, 90, 180, 365 ngày) hoặc không hết hạn. | Hệ thống đơn giản, kịch bản đồng bộ |
| Mã ứng dụng và khoá bí mật | Lấy mã 1 giờ ở /oauth/token theo OAuth 2.0 Client Credentials, như OneRoster. | Hệ thống đã quen OAuth 2.0 |
curl -H "Authorization: Bearer ACCESS_TOKEN" \
"https://<trường>.<tên-miền-nền-tảng>/integration/v1/seasons"- Thay khoá: nhà trường bấm Thay khoá để cấp mã (hoặc khoá bí mật) mới; mã cũ còn dùng được 24 giờ để kịp đổi.
- Thu hồi: ngừng ngay mọi mã của kết nối; không hoàn tác được.
- Giới hạn địa chỉ: nếu nhà trường nhập danh sách địa chỉ mạng (IPv4/IPv6, nhận dạng CIDR như
203.0.113.0/24), lời gọi từ địa chỉ khác bị từ chối với403.
Mã truy cập và khoá bí mật chỉ hiện một lần lúc tạo. Lưu ở biến môi trường hay kho khoá, không đưa vào mã nguồn, không gửi qua tin nhắn không mã hoá.
Quyền
| Quyền (scope) | Cho phép |
|---|---|
students:read | Đọc sinh viên |
students:write | Thêm, sửa, khoá, mở khoá sinh viên |
seasons:read | Đọc đợt thực tập |
seasons:write | Tạo, cập nhật đợt theo kỳ của hệ thống trường |
enrollments:read | Đọc sinh viên trong đợt |
enrollments:write | Đưa sinh viên vào đợt |
results:read | Đọc kết quả thực tập |
companies:read | Đọc doanh nghiệp đã duyệt trong đợt |
imports:write | Gửi gói CSV OneRoster |
Theo dõi việc xử lý (/jobs/...) cần một trong các quyền ghi: students:write, enrollments:write, imports:write. Thiếu quyền trả 403 kèm tên quyền cần.
Quy ước chung
Phân trang
Danh sách dài (/students, /seasons/{id}/enrollments, /seasons/{id}/results) trả từng trang:
limit: 1 đến 500, mặc định 100.- Thân phản hồi có
next: chuỗi con trỏ của trang sau, hoặcnullkhi hết. Gửi lại bằng?cursor=<next>cùng các tham số cũ. - Tiêu đề
Link: <...>; rel="next"(RFC 8288) chứa sẵn địa chỉ trang sau.
Đồng bộ phần thay đổi
GET /students?updatedSince=2026-11-01T00:00:00Z chỉ trả sinh viên có thay đổi từ thời điểm đó. Lưu thời điểm bắt đầu mỗi lần đồng bộ rồi dùng cho lần sau.
Chạy thử
Mọi lệnh ghi nhận ?dryRun=true: cổng kiểm tra và trả kết quả như thật nhưng không lưu gì.
Gửi lại an toàn
Lệnh gửi theo lô (POST) nhận tiêu đề Idempotency-Key (1 đến 255 ký tự, nên dùng UUID). Gửi lại cùng khoá trong 24 giờ thì nhận lại đúng phản hồi lần đầu (kèm Idempotent-Replayed: true), không tạo việc mới. Cùng khoá mà nội dung khác thì bị từ chối (422).
Định danh
- Sinh viên được nhận ra theo mã sinh viên (
studentCode, không phân biệt hoa thường). externalId(tuỳ chọn, tối đa 128 ký tự) là mã của bản ghi trong hệ thống của trường. Gửi kèm thì lần sau cổng nhận ra sinh viên theo mã này trước, rồi mới tới mã sinh viên, rồi email.- Đợt thực tập có
iddo cổng cấp vàexternalIdlà mã kỳ học bên hệ thống trường.
Các nhóm điểm truy cập
| Nhóm | Trang |
|---|---|
| Đọc đợt, sinh viên, ghi danh, kết quả, doanh nghiệp | Đọc dữ liệu |
| Gửi đợt, sinh viên, ghi danh, khoá; theo dõi việc xử lý | Gửi dữ liệu |
| Gửi gói CSV OneRoster | Gói CSV OneRoster |