📌 REST API 개념 정리 및 해석
1. REST API란?
**REST(Representational State Transfer)**는 클라이언트와 서버 간의 상호작용을 정의하는 아키텍처 스타일입니다. RESTful API는 주로 **자원(Resource)**을 중심으로 설계되며, 이를 HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용하여 자원에 대해 **CRUD 작업(Create, Read, Update, Delete)**을 수행합니다.
핵심 개념
- Representational: 자원 표현
- State: 자원의 상태
- Transfer: 클라이언트와 서버 간 데이터 전송
RESTful API 특징
- 자원 식별: 자원은 URI를 통해 식별됩니다. 예: /users/{userId}
- 자원 표현: 자원의 데이터는 JSON, XML 형식으로 클라이언트에게 전달됩니다.
- 행위: 자원에 대해 GET, POST, PUT, DELETE와 같은 HTTP 메소드로 작업을 수행합니다.
REST API 탄생 배경
- 모바일 앱, 웹, 스마트기기와 같은 다양한 클라이언트들이 등장하면서, 별도의 서버를 구축하지 않고 단일 API로 다양한 클라이언트와 통신할 수 있는 방식이 필요해졌습니다.
- REST API는 문자열 기반의 데이터를 주고받을 수 있도록 설계되었고, 이는 기존의 웹 서버 방식보다 훨씬 효율적입니다.
2. REST API의 핵심 원칙
1) 자원 기반의 URL
REST API는 자원을 식별하기 위해 고유한 URL을 사용합니다.
- 예시: /users/123 → 123번 사용자의 정보를 조회하는 URL
- 자원이란 데이터베이스 레코드, 문서, 이미지 등 인터넷에서 접근할 수 있는 모든 것을 의미합니다.
2) 상태 없음 (Statelessness)
- 상태 없음은 서버가 클라이언트의 상태를 저장하지 않는다는 의미입니다. 각 요청은 독립적이어야 하며, 세션 관리를 하지 않습니다.
- 예시: 로그인 상태를 서버가 기억하지 않으며, 클라이언트는 매번 필요한 인증 정보를 요청에 포함해야 합니다.
3) 표준화된 메소드 사용
REST API는 HTTP 메소드를 사용하여 자원에 대한 다양한 작업을 수행합니다.
HTTP 메소드설명예시
GET | 자원 조회 | /users/1 → 사용자 정보 조회 |
POST | 자원 생성 | /users → 새로운 사용자 생성 |
PUT | 자원 수정 | /users/1 → 사용자 정보 수정 |
DELETE | 자원 삭제 | /users/1 → 사용자 삭제 |
4) 통신을 위한 표현 (Representation)
- REST API는 자원의 표현을 통해 데이터를 클라이언트와 서버 간에 주고받습니다. 일반적으로 JSON 형식으로 데이터가 표현됩니다.
- 예시: 사용자 정보는 JSON 형식으로 전달될 수 있습니다.
3. REST API의 구성 요소
REST API는 크게 자원(Resource), HTTP 메소드(Method), 표현(Representation) 세 가지 요소로 구성됩니다.
1) 자원 (Resource)
- 자원은 URL을 통해 식별됩니다. 예를 들어, /feeds/:feed_id와 같은 URI를 사용하여 데이터를 요청합니다.
2) HTTP 메소드 (Method)
- REST API는 POST, GET, PUT, DELETE와 같은 HTTP 메소드를 사용하여 자원에 대한 작업을 수행합니다.
- GET: 자원의 조회
- POST: 자원의 생성
- PUT: 자원의 수정
- DELETE: 자원의 삭제
3) 표현 (Representation)
- 서버에서 클라이언트로 데이터를 전달할 때 JSON, XML, Text 등의 형식을 사용합니다. 가장 많이 사용되는 형식은 JSON입니다.
4. REST API 해석 연습
게시글 API 예시
URLHTTP 메소드작업
/feeds/1 | GET | ID가 1인 게시글 데이터를 조회 |
/feeds/1 | POST | ID가 1인 게시글을 생성 |
/feeds/1 | PUT | ID가 1인 게시글을 수정 (업데이트) |
/feeds/1 | DELETE | ID가 1인 게시글을 삭제 |
/feeds/all | GET | 모든 게시글을 조회 (페이지네이션 등) |
/myinfo | GET | 내 정보 조회 |
/myinfo | PUT | 내 정보 수정 |
/myinfo | DELETE | 내 계정 탈퇴 |
인스타그램 API 예시
작업HTTP 메소드URL 예시설명
사용자 프로필 조회 | GET | /users/{username} | 특정 사용자의 프로필을 조회 |
게시물 목록 조회 | GET | /posts | 모든 게시물 목록을 조회 |
새 게시물 작성 | POST | /posts | 새 게시물을 생성 |
게시물 수정 | PUT | /posts/{post_id} | 특정 게시물을 수정 |
게시물 삭제 | DELETE | /posts/{post_id} | 특정 게시물을 삭제 |
댓글 목록 조회 | GET | /posts/{post_id}/comments | 특정 게시물의 댓글 목록을 조회 |
댓글 작성 | POST | /posts/{post_id}/comments | 특정 게시물에 댓글을 작성 |
팔로우 | POST | /users/{username}/follow | 특정 사용자를 팔로우 |
언팔로우 | DELETE | /users/{username}/follow | 특정 사용자를 언팔로우 |
이 API 예시들은 REST API의 자원, 메소드, 표현을 명확히 보여주며, 다양한 자원에 대해 CRUD 작업을 어떻게 처리할 수 있는지 설명합니다.
'Flask' 카테고리의 다른 글
Chapter 2-3 Flask-RESTful API (0) | 2025.04.18 |
---|---|
Chapter 2-2 Jsonify란? (0) | 2025.04.18 |
Chapter 1-6 Flask 프로젝트 세팅 (0) | 2025.04.17 |
Chapter 1-8 Jinja (Template Engine) (0) | 2025.04.17 |
Chapter 1-7 라우팅(Routing) (0) | 2025.04.17 |