콘텐츠로 이동

5. API 명세

dcamp 웹사이트는 JSON:API 표준을 사용하여 프론트엔드(dcamp.kr)와 데이터를 주고받습니다. JSON:API는 웹에서 데이터를 주고받는 표준 규격으로, 일관된 방식으로 데이터를 요청하고 응답받을 수 있습니다.

┌─────────────┐ ┌─────────────┐
│ │ 1. 데이터 요청 (HTTP) │ │
│ dcamp.kr │ ────────────────────────────► │ 관리 시스템 │
│ (프론트엔드) │ │ (백엔드) │
│ │ 2. JSON 응답 │ │
│ │ ◄──────────────────────────── │ │
└─────────────┘ └─────────────┘
환경API 기본 주소
운영https://admin.dcamp.kr/jsonapi
개발https://dcamp-admin.sknkwoxs.com/jsonapi

API 접근에는 두 가지 방식이 있습니다.

누구나 접근 가능한 데이터입니다. Drupal의 익명 사용자(anonymous) 권한에 따라 접근이 허용됩니다.

익명 사용자에게 부여된 권한:

권한설명접근 가능 API
access contentNode 콘텐츠 조회/jsonapi/node/*
view portfolioPortfolio 조회/jsonapi/portfolio/*
view eventDcampEvent 조회/jsonapi/dcamp_event/*
view media미디어 파일 조회/jsonapi/media/*
access any webform configuration웹폼 양식 조회/webform/*

공개 API 예시:

  • 공지사항 목록
  • 스타트업/파트너 목록 (공개 정보)
  • 프로그램 목록

로그인한 사용자만 접근 가능한 데이터입니다. 추가로 본인 데이터만 접근 가능하도록 코드에서 제한합니다.

  • 신청 내역 (apply) - 본인 신청만 조회 가능
  • 회원 정보 수정 - 본인 정보만 수정 가능
  • 신청서 제출 - 로그인 필수

인증 흐름:

[사용자] [프론트엔드] [관리 시스템]
│ │ │
│ 1. 로그인 시도 │ │
│ (이메일/비밀번호) │ │
│ ────────────────────► │ │
│ │ │
│ │ 2. 토큰 요청 │
│ │ POST /oauth/token │
│ │ ──────────────────────► │
│ │ │
│ │ 3. 토큰 발급 │
│ │ { access_token: "..." }│
│ │ ◄────────────────────── │
│ │ │
│ 4. 로그인 완료 │ │
│ ◄──────────────────── │ │
│ │ │
│ 5. 데이터 요청 │ │
│ (마이페이지 등) │ │
│ ────────────────────► │ 6. 토큰과 함께 요청 │
│ │ Authorization: Bearer │
│ │ ──────────────────────► │
│ │ │
│ │ 7. 데이터 응답 │
│ │ ◄────────────────────── │
│ 8. 화면 표시 │ │
│ ◄──────────────────── │ │

엔드포인트메서드설명인증
/jsonapi/node/noticeGET공지사항 목록불필요
/jsonapi/node/notice/{id}GET공지사항 상세불필요
/jsonapi/node/insightGET인사이트 목록불필요
/jsonapi/node/pageGET페이지 정보불필요
엔드포인트메서드설명인증
/jsonapi/portfolio/startupGET스타트업 목록불필요
/jsonapi/portfolio/startup/{id}GET스타트업 상세불필요
/jsonapi/portfolio/partnerGET파트너사 목록불필요
/jsonapi/portfolio/campusGET캠퍼스 목록불필요
엔드포인트메서드설명인증
/jsonapi/dcamp_event/applicantGET참가 모집 프로그램불필요
/jsonapi/dcamp_event/applicationGET심사형 프로그램불필요
/jsonapi/dcamp_event/applyPOST프로그램 신청필요
/jsonapi/dcamp_event/applyGET내 신청 내역필요
엔드포인트메서드설명인증
/user/registerPOST회원 가입불필요
/oauth/tokenPOST로그인 (토큰 발급)불필요
/jsonapi/user/user/{id}GET내 정보 조회필요
/jsonapi/user/user/{id}PATCH내 정보 수정필요
엔드포인트메서드설명인증
/webform/{webform_id}GET양식 정보 조회불필요
/webform/{webform_id}/submitPOST신청서 제출필요
/jsonapi/webform_submissionGET내 제출 내역필요

요청:

GET /jsonapi/portfolio/startup?page[limit]=10&sort=-created

응답:

{
"data": [
{
"type": "portfolio--startup",
"id": "abc-123",
"attributes": {
"title": "테크스타트업",
"field_short_description": "AI 기반 솔루션 기업",
"field_founded_date": "2023-01-15",
"created": "2024-03-20T10:30:00+09:00"
},
"relationships": {
"field_logo": {
"data": { "type": "file--file", "id": "file-456" }
}
}
}
],
"links": {
"next": "/jsonapi/portfolio/startup?page[offset]=10"
}
}

요청:

POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=password
&client_id=frontend
&username=user@example.com
&password=비밀번호

응답:

{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "def50200..."
}

JSON:API는 표준화된 방식으로 데이터를 필터링하고 정렬할 수 있습니다.

목적쿼리 파라미터
특정 카테고리?filter[field_category]=tech
공개된 항목만?filter[status]=1
날짜 범위?filter[created][condition][path]=created&filter[created][condition][operator]=>=&filter[created][condition][value]=2024-01-01
목적쿼리 파라미터
최신순?sort=-created
이름순?sort=title
복합 정렬?sort=-sticky,-created
목적쿼리 파라미터
페이지당 10개?page[limit]=10
2페이지?page[limit]=10&page[offset]=10

JSON:API 외에 특별한 기능을 위한 자체 API도 제공합니다.

엔드포인트설명
/api/check-email이메일 중복 확인
/api/verify-email이메일 인증 처리
/api/social-login/{provider}소셜 로그인 처리
/api/router프론트엔드 라우팅 정보

← 이전: 4. 데이터베이스 설계 | 다음: 6. 커스텀 모듈 →