학생 데이터 OpenAPI

개요

학생 데이터 OpenAPI는 학생 데이터를 간단한 HTTP 요청을 통하여 서비스에 통합할 수 있도록 돕습니다. 해당 REST API를 호출하여 기본적인 학생 데이터를 획득할 수 있습니다.

인증

모든 API 요청은 HTTP 헤더에 API 키를 포함해야 합니다.

X-API-KEY: your-api-key-here

API 키는 UUID 형식이며, 만료되거나 유효하지 않은 키를 사용할 경우 401 Unauthorized 응답을 받게 됩니다.

엔드포인트

GET /v1/students

권한 범위

STUDENT_READ 권한 범위가 필요합니다.

요청 파라미터

파라미터타입필수 여부설명예시
studentIdLong선택학생 ID1
nameString선택이름홍길동
emailString선택이메일student@gsm.hs.kr
gradeInt선택학년 (1-3)1
classNumInt선택반 (1-4)1
numberInt선택번호 (1-18)1
sexSex선택성별 (MAN, WOMAN)MAN
roleStudentRole선택학생 역할 (STUDENT_COUNCIL, DORMITORY_MANAGER, GENERAL_STUDENT, GRADUATE, WITHDRAWN)GENERAL_STUDENT
dormitoryRoomInt선택기숙사 호실301
includeGraduatesBoolean선택졸업생 포함 여부 (기본값: false)false
includeWithdrawnBoolean선택자퇴생 포함 여부 (기본값: false)false
onlyEnrolledBoolean선택재학생만 조회 여부 — true이면 졸업생·자퇴생 모두 제외 (기본값: false)false
pageInt선택페이지 번호 (기본값: 0)0
sizeInt선택페이지 크기 (기본값: 300)300
sortByStudentSortBy선택정렬 기준 (ID, NAME, EMAIL, STUDENT_NUMBER, GRADE, CLASS_NUM, NUMBER, MAJOR, ROLE, SEX, DORMITORY_ROOM)STUDENT_NUMBER
sortDirectionSortDirection선택정렬 방향 (ASC, DESC) (기본값: ASC)ASC

파라미터 우선순위

재학 상태 필터 파라미터 간에는 다음과 같은 우선순위가 적용됩니다.

onlyEnrolled > includeGraduates > includeWithdrawn

  • onlyEnrolled = true — 가장 높은 우선순위. includeGraduates·includeWithdrawn 값에 무관하게 재학생만 반환됩니다.
  • includeGraduatesonlyEnrolledfalse일 때 유효. false이면 졸업생을 제외합니다.
  • includeWithdrawnonlyEnrolledfalse일 때 유효. false이면 자퇴생을 제외합니다.

기본값(includeGraduates=false, includeWithdrawn=false, onlyEnrolled=false)으로 호출하면 졸업생·자퇴생이 모두 제외된 재학생 목록이 반환됩니다.

응답 형식

모든 성공 응답은 다음과 같은 구조로 반환됩니다.

필드타입설명예시
statusStringHTTP 상태 메시지OK
codeIntHTTP 상태 코드200
messageString응답 메시지OK
dataObject학생 데이터 목록-

data 객체

data 필드는 다음 필드를 포함합니다.

필드타입설명예시
totalPagesInt전체 페이지 수1
totalElementsLong전체 학생 수300
studentsList<StudentResDto>학생 목록-

학생 객체 (StudentResDto)

각 학생 객체는 다음 필드를 포함합니다.

필드타입설명예시
idLong학생 ID1
nameString이름홍길동
sexSex성별 (MAN, WOMAN)WOMAN
emailString이메일student@gsm.hs.kr
gradeInt?학년 (졸업/자퇴 시 null)1
classNumInt?반 (졸업/자퇴 시 null)1
numberInt?번호 (졸업/자퇴 시 null)1
studentNumberInt?학번 (졸업/자퇴 시 null)1101
majorMajor?전공 (졸업/자퇴 시 null, 값: SW_DEVELOPMENT, SMART_IOT, AI)SW_DEVELOPMENT
roleStudentRole학생 역할 (STUDENT_COUNCIL, DORMITORY_MANAGER, GENERAL_STUDENT, GRADUATE, WITHDRAWN)GENERAL_STUDENT
dormitoryFloorInt?기숙사 층 (비기숙사생인 경우 null)3
dormitoryRoomInt?기숙사 호실 (비기숙사생인 경우 null)301
majorClubClubSummaryDto?전공 동아리 (미소속인 경우 null)-
autonomousClubClubSummaryDto?자율 동아리 (미소속인 경우 null)-

동아리 객체 (ClubSummaryDto)

학생 응답에 포함된 동아리 데이터는 다음 필드를 포함합니다.

필드타입설명예시
idLong동아리 ID1
nameString동아리 이름SW개발동아리
typeClubType동아리 종류(MAJOR_CLUB, AUTONOMOUS_CLUB)MAJOR_CLUB

요청 예시

curl -X GET "https://api.datagsm.com/v1/students?grade=1&classNum=1&page=0&size=50" \
  -H "X-API-KEY: your-api-key-here"

정렬을 포함한 요청 예시

# 학번 순으로 정렬
curl -X GET "https://api.datagsm.com/v1/students?sortBy=STUDENT_NUMBER&sortDirection=ASC&page=0&size=50" \
  -H "X-API-KEY: your-api-key-here"

# 이름 역순으로 정렬
curl -X GET "https://api.datagsm.com/v1/students?sortBy=NAME&sortDirection=DESC&page=0&size=50" \
  -H "X-API-KEY: your-api-key-here"

응답 예시

{
  "status": "OK",
  "code": 200,
  "message": "OK",
  "data": {
    "totalPages": 1,
    "totalElements": 1,
    "students": [
      {
        "id": 1,
        "name": "홍길동",
        "sex": "MAN",
        "email": "student@gsm.hs.kr",
        "grade": 1,
        "classNum": 1,
        "number": 1,
        "studentNumber": 1101,
        "major": "SW_DEVELOPMENT",
        "role": "GENERAL_STUDENT",
        "dormitoryFloor": 3,
        "dormitoryRoom": 301,
        "majorClub": {
          "id": 1,
          "name": "SW개발동아리",
          "type": "MAJOR_CLUB"
        },
        "autonomousClub": null
      }
    ]
  }
}

오류 응답

상태 코드설명
401 UnauthorizedAPI 키가 유효하지 않거나 만료됨
403 Forbidden권한 범위 부족
429 Too Many Requests단위 시간에 너무 많은 요청량 발생
400 Bad Request잘못된 요청 파라미터

사용 예제

다음은 여러 언어에서 학생 데이터를 조회하는 예제입니다.

const axios = require('axios');

async function getStudents(studentId) {
try {
  const response = await axios.get('https://api.datagsm.com/v1/students', {
    headers: {
      'X-API-KEY': 'your-api-key-here',
    },
    params: {
      studentId: studentId,
    },
  });
  return response.data;
} catch (error) {
  console.error('Error:', error.message);
  throw error;
}
}