Tài liệu này hướng dẫn tích hợp các API tra cứu danh mục thuộc KnowledgeUnitsController của QIG.BaseLms.PartnerApi. Bộ API này thường được dùng trước khi gọi API chia sẻ học liệu để lấy đúng curriculumProgramCode, subjectCode, gradeCode và knowledgeUnitCode.
1. Mục tiêu
Tài liệu tập trung vào:
- Danh sách đầy đủ 5 endpoint thuộc
KnowledgeUnitsController - Cách lọc dữ liệu theo
curriculumProgramCode,gradeCode,subjectCode - Ý nghĩa của từng field response
- Luồng gọi khuyến nghị trước khi đồng bộ học liệu
2. Thông tin kết nối
2.1. Địa chỉ dịch vụ
- Base URL:
https://lmsbpartnerapi.vstudy.edu.vn - Swagger tham khảo nhanh:
https://lmsbpartnerapi.vstudy.edu.vn/swagger/index.html
2.2. Xác thực
- Các API trong tài liệu này hiện không bắt buộc gửi
X-Api-Key - Có thể gọi ẩn danh để tra cứu danh mục dùng chung
- Swagger hiện vẫn hiển thị ô
Authorizedo cấu hình OpenAPI áp dụng chung cho toàn bộ tài liệu; tuy nhiênKnowledgeUnitsControllerđang được đánh dấuAllowAnonymous
2.3. Format response chung
Tất cả response dùng cùng một cấu trúc:
{
"success": true,
"message": "Mô tả kết quả",
"data": []
}json
2.4. Lưu ý về query string
- Các mã tra cứu như
curriculumProgramCode,gradeCode,subjectCodeđược xử lý theo kiểu bỏ khoảng trắng đầu cuối và so sánh không phân biệt hoa thường - Query parameter của ASP.NET Core được bind không phân biệt hoa thường; ví dụ trong tài liệu dùng
gradeCode,subjectCode,curriculumProgramCode - Có thể không cần truyền các tham số để lấy tất cả bản ghi của Api.
3. Danh sách endpoint
GET /api/lms-base/publish/knowledge-units/curriculum-programs: tra cứu chương trìnhGET /api/lms-base/publish/knowledge-units/grades: tra cứu danh sách khốiGET /api/lms-base/publish/knowledge-units/subjects: tra cứu môn họcGET /api/lms-base/publish/knowledge-units/subject-grades: tra cứu mapping khối và môn họcGET /api/lms-base/publish/knowledge-units: tra cứu danh sách đơn vị kiến thức dạng phẳng
4. Luồng gọi khuyến nghị
- Gọi
gradesđể lấygradeCodechuẩn từ01đến12. - Gọi
curriculum-programsđể lấy mã chương trình đang dùng. - Gọi
subjectsđể lấy danh sách môn học theocurriculumProgramCodevà hoặcgradeCode. - Gọi
subject-gradesnếu cần kiểm tra lại mapping khối và môn. - Gọi
knowledge-unitsđể lấyknowledgeUnitCodephù hợp trước khi gửi học liệu.
Nếu tích hợp với API chia sẻ học liệu:
gradeCodenên lấy trực tiếp từ endpointgrades; nếu hệ thống nguồn đã có mã khối tương thích thì có thể đối soát thêm bằngsubject-gradescurriculumProgramCodelấy từ endpointcurriculum-programssubjectCodelấy từ endpointsubjectsknowledgeUnitCodechính là fieldcodetrả về từ endpointGET /api/lms-base/publish/knowledge-units
5. API chi tiết
5.1. Tra cứu khối
- Method:
GET - Path:
/api/lms-base/publish/knowledge-units/grades
Query params:
- Không có
Response data[]:
| Field | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
code | string | Mã khối dạng 2 ký tự, từ 01 đến 12 |
name | string | Tên khối hiển thị, ví dụ Khối 1, Khối 12 |
Ví dụ curl:
curl --location "https://lmsbpartnerapi.vstudy.edu.vn/api/lms-base/publish/knowledge-units/grades"bash
Ví dụ response:
{
"success": true,
"message": "Lấy danh sách khối thành công.",
"data": [
{
"code": "01",
"name": "Khối 1"
},
{
"code": "02",
"name": "Khối 2"
},
{
"code": "12",
"name": "Khối 12"
}
]
}json
Ghi chú:
- Endpoint trả về danh sách cố định từ
01đến12 - Kết quả được sắp xếp tăng dần theo mã khối
5.2. Tra cứu chương trình
- Method:
GET - Path:
/api/lms-base/publish/knowledge-units/curriculum-programs
Query params:
| Field | Bắt buộc | Mặc định | Ý nghĩa |
|---|---|---|---|
activeOnly | Không | true | Chỉ lấy các chương trình đang hoạt động |
Response data[]:
| Field | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
id | string | Định danh bản ghi |
code | string | Mã chương trình |
name | string | Tên chương trình |
displayOrder | int? | Thứ tự hiển thị |
isActive | boolean | Trạng thái hoạt động |
Ví dụ curl:
curl --location "https://lmsbpartnerapi.vstudy.edu.vn/api/lms-base/publish/knowledge-units/curriculum-programs?activeOnly=true"bash
Ví dụ response:
{
"success": true,
"message": "Lấy danh sách chương trình thành công.",
"data": [
{
"id": "01JTESTCUR0000000000000001",
"code": "CUR01",
"name": "Chương trình GDPT 2018",
"displayOrder": 1,
"isActive": true
}
]
}json
Ghi chú:
- Kết quả được sắp xếp theo
displayOrdertăng dần, sau đó theocode - Nếu không truyền
activeOnly, hệ thống chỉ trả về dữ liệu đang hoạt động
5.3. Tra cứu môn học
- Method:
GET - Path:
/api/lms-base/publish/knowledge-units/subjects
Query params:
| Field | Bắt buộc | Mặc định | Ý nghĩa |
|---|---|---|---|
curriculumProgramCode | Không | - | Lọc theo mã chương trình |
gradeCode | Không | - | Lọc theo mã khối; hệ thống lọc thông qua mapping SubjectGrades |
activeOnly | Không | true | Chỉ lấy môn đang hoạt động |
Response data[]:
| Field | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
id | string | Định danh bản ghi |
code | string | Mã môn học |
curriculumProgramCode | string | Mã chương trình của môn học |
name | string | Tên môn học |
displayOrder | int? | Thứ tự hiển thị |
isActive | boolean | Trạng thái hoạt động |
Ví dụ curl:
curl --location "https://lmsbpartnerapi.vstudy.edu.vn/api/lms-base/publish/knowledge-units/subjects?curriculumProgramCode=CUR01&gradeCode=10&activeOnly=true"bash
Ví dụ response:
{
"success": true,
"message": "Lấy danh sách môn học thành công.",
"data": [
{
"id": "01JTESTSUB0000000000000001",
"code": "SUB01",
"curriculumProgramCode": "CUR01",
"name": "Toán",
"displayOrder": 1,
"isActive": true
},
{
"id": "01JTESTSUB0000000000000002",
"code": "SUB02",
"curriculumProgramCode": "CUR01",
"name": "Vật lý",
"displayOrder": 2,
"isActive": true
}
]
}json
Ghi chú:
- Nếu chỉ truyền
gradeCode, endpoint sẽ lấy danh sách môn được map với khối tương ứng - Nếu truyền cả
curriculumProgramCodevàgradeCode, kết quả là giao của hai điều kiện lọc - Kết quả được sắp xếp theo
displayOrder, sau đó theocode
5.4. Tra cứu mapping khối và môn học
- Method:
GET - Path:
/api/lms-base/publish/knowledge-units/subject-grades
Query params:
| Field | Bắt buộc | Ý nghĩa |
|---|---|---|
gradeCode | Không | Lọc theo mã khối |
subjectCode | Không | Lọc theo mã môn học |
Response data[]:
| Field | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
id | string | Định danh mapping |
gradeCode | string | Mã khối |
subjectCode | string | Mã môn học |
curriculumProgramCode | string | Mã chương trình của môn học được map với khối |
subjectName | string | Tên môn học |
subjectOrder | int? | Thứ tự hiển thị của môn học nếu có |
Ví dụ curl:
curl --location "https://lmsbpartnerapi.vstudy.edu.vn/api/lms-base/publish/knowledge-units/subject-grades?gradeCode=10"bash
Ví dụ response:
{
"success": true,
"message": "Lấy danh sách mapping khối môn thành công.",
"data": [
{
"id": "01JTESTSBG0000000000000001",
"gradeCode": "10",
"subjectCode": "0101",
"curriculumProgramCode": "01",
"subjectName": "Toán",
"subjectOrder": 1
},
{
"id": "01JTESTSBG0000000000000002",
"gradeCode": "10",
"subjectCode": "0102",
"curriculumProgramCode": "01",
"subjectName": "Vật lý",
"subjectOrder": 2
}
]
}json
Ghi chú:
- Endpoint này hữu ích khi hệ thống nguồn đang quản lý riêng danh mục khối và danh mục môn, cần kiểm tra quan hệ hợp lệ trước khi gửi học liệu
- Kết quả được sắp xếp theo
gradeCode, sau đó theosubjectCode
5.5. Tra cứu đơn vị kiến thức dạng phẳng
- Method:
GET - Path:
/api/lms-base/publish/knowledge-units
Query params:
| Field | Bắt buộc | Mặc định | Ý nghĩa |
|---|---|---|---|
curriculumProgramCode | Không | - | Lọc theo mã chương trình |
gradeCode | Không | - | Lọc theo mã khối |
subjectCode | Không | - | Lọc theo mã môn học |
activeOnly | Không | true | Chỉ lấy đơn vị kiến thức đang hoạt động |
Response data[]:
| Field | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
id | string | Định danh bản ghi |
code | string | Mã đơn vị kiến thức |
name | string | Tên đơn vị kiến thức |
targetLearning | string? | Mục tiêu học tập nếu có |
parentCode | string? | Mã đơn vị cha; rỗng nếu là nút gốc |
curriculumProgramCode | string | Mã chương trình |
subjectCode | string | Mã môn học |
gradeCode | string | Mã khối |
displayOrder | int? | Thứ tự hiển thị |
isActive | boolean | Trạng thái hoạt động |
Ví dụ curl:
curl --location "https://lmsbpartnerapi.vstudy.edu.vn/api/lms-base/publish/knowledge-units?curriculumProgramCode=CUR01&gradeCode=10&subjectCode=SUB01&activeOnly=true"bash
Ví dụ response:
{
"success": true,
"message": "Lấy danh sách đơn vị kiến thức thành công.",
"data": [
{
"id": "01JTESTKUR0000000000000001",
"code": "KU-ROOT-01",
"name": "Hàm số bậc nhất",
"targetLearning": "Nắm khái niệm hàm số bậc nhất",
"parentCode": null,
"curriculumProgramCode": "CUR01",
"subjectCode": "SUB01",
"gradeCode": "10",
"displayOrder": 1,
"isActive": true
},
{
"id": "01JTESTKUC0000000000000001",
"code": "KU-CHILD-01",
"name": "Đồ thị hàm số bậc nhất",
"targetLearning": "Vẽ được đồ thị",
"parentCode": "KU-ROOT-01",
"curriculumProgramCode": "CUR01",
"subjectCode": "SUB01",
"gradeCode": "10",
"displayOrder": 2,
"isActive": true
}
]
}json
Ghi chú:
- Endpoint trả về danh sách phẳng, không phải cây lồng nhau
- Quan hệ cha con được xác định qua
parentCode - Đây là endpoint nên dùng để lấy
knowledgeUnitCodekhi gọi API chia sẻ học liệu
6. Lưu ý tích hợp quan trọng
activeOnlymặc định làtrue; nếu cần đồng bộ hoặc đối soát cả dữ liệu ngừng hoạt động thì truyềnactiveOnly=false- Khi không có dữ liệu phù hợp, hệ thống vẫn trả
200 OKvớidata: [] - Dữ liệu tra cứu được cache theo từng tổ hợp query trong
300giây; nếu danh mục vừa cập nhật, kết quả có thể chậm phản ánh tối đa khoảng 5 phút - Nếu cùng một request được gọi lặp lại liên tục trong thời gian cache còn hiệu lực, response có thể chưa phản ánh bản ghi mới thêm ngay lập tức
7. Mã trạng thái thường gặp
200 OK: gọi thành công, kể cả trường hợp không có dữ liệu phù hợp400 Bad Request: hiếm gặp, chủ yếu do query không bind được theo kiểu dữ liệu401 Unauthorized: không áp dụng cho bộ API này trong implementation hiện tại vì controller cho phép gọi ẩn danh404 Not Found: không áp dụng khi tra cứu danh sách; nếu không có dữ liệu, hệ thống trả mảng rỗng
8. Khuyến nghị sử dụng với API học liệu
- Luôn lấy mới
subjectCodevàknowledgeUnitCodetừ bộ API này trước khi tạo học liệu nếu hệ thống nguồn không lưu đồng bộ master data với Trục LMS - Nếu người dùng chọn môn theo khối, nên gọi
subjects?gradeCode=...trước để chỉ hiển thị các môn hợp lệ - Nếu cần dựng giao diện cây chương hoặc bài, lấy danh sách phẳng từ endpoint
knowledge-unitsrồi tự nhóm lại theoparentCodeở phía client
