∟ Framework/∟ DRF

RESTful API와 JSON

최 수빈 2025. 3. 28. 19:39

 

 

다양한 인터페이스 방식

  • CLI(Command Line Interface)
    명령줄을 통해 컴퓨터와 소통하는 방법
  • GUI(Graphical User Interface)
    그래픽 요소(버튼, 창 등)를 통해 사용자와 소통하는 방법
  • API(Application Programming Interface)
    프로그램끼리 서로 정보를 주고받는 통신 방식

    요청(Request)과 응답(Response)를 모두 포함하는 구조
    기계 ↔ 인간 간 소통, 소프트웨어 ↔ 소프트웨어 간 통신에 사용됨

    웹 앱에서 미세먼지 정보를 보여주기 위해 → 기상청 API 요청
    카카오 로그인 기능 구현 → 카카오 API와 통신
    유튜브 영상을 불러오기 → YouTube API 활용

 

RESTful API

 

REST (Representational State Transfer)

 

웹을 위한 소프트웨어 설계 방법론으로, 2000년 로이 필딩(Roy Fielding)의 논문에서 처음 제안됨

 

REST 논문 원문

 

Architectural Styles and the Design of Network-based Software Architectures

UNIVERSITY OF CALIFORNIA, IRVINE Architectural Styles and the Design of Network-based Software Architectures DISSERTATION submitted in partial satisfaction of the requirements for the degree of DOCTOR OF PHILOSOPHY in Information and Computer Science by Ro

ics.uci.edu

 

 

 

웹 페이지 하나를 하나의 상태(State)로 간주

유저가 링크를 클릭하면 새로운 상태로 전이됨 → State Transfer

이때 전달되는 데이터는 특정 표현(Representation)을 따름

 

하나의 상태를 표현(Represent)하고, 이를 주고받으며 전이(Transfer)되므로

→ Representational State Transfer

 

 

RESTful API

 

REST의 설계 원칙을 적용한 API

→ REST한 방식으로 리소스를 주고받는 API 설계 패턴

 

RESTful API의 설계 방식

동작 HTTP 메서드 URI 예시 의미
생성 POST /articles/ 새로운 게시글 생성
조회 GET /articles/ 게시글 목록 조회
조회 GET /articles/1 ID가 1인 게시글 조회
삭제 DELETE /articles/1/ ID가 1인 게시글 삭제

 

RESTful API의 3가지 구성 요소

  • 자원(Resource)
    URI로 표현(/articles/, /users/1)
  • 행위(Verb)
    HTTP 메서드로 표현 (GET, POST, PUT, DELETE, PATCH..)
  • 표현(Representation)
    일반적으로 JSON 형식으로 결과 전달

*URI는 명사 중심으로 작성

POST /articles/create/  → POST /articles/ 

 

→ 규칙을 따르지 않아도 API는 작동하지만, 규칙을 따를수록 예측 가능하고, 협업과 유지보수가 쉬워지므로 RESTful API를 사용

 

 

 

JSON (JavaScript Object Notation)

JS 문법 기반의 데이터 포맷

사람이 읽기 쉽고, 컴퓨터가 파싱하기 쉬움

파이썬의 dict와 같이 Key-Value 구조

 

 RESTful API에서는 데이터를 주고받을 때 일반적으로 JSON을 사용함

 

  • .json 확장자 사용
  • 문자열은 "(큰따옴표)로 감싸야 함
  • true, false, 숫자 등 다양한 자료형 사용 가능

 

JSON 예

{
  "user1": {
    "name": "aiden",
    "age": 22,
    "tags": ["python", "javascript", "django"]
  },
  "user2": {
    "name": "bella",
    "age": 25,
    "tags": ["react", "typescript"]
  }
}

리스트, 객체, 중첩 구조 모두 가능

VSCode의 settings.json 파일 등에서도 자주 사용