250x250
반응형
관리 메뉴

Allen's 데이터 맛집

REST API란 무엇인가: 개념부터 설계와 구현까지 본문

Programming/etc

REST API란 무엇인가: 개념부터 설계와 구현까지

Allen93 2025. 2. 7. 15:34
REST API는 현대 웹 애플리케이션 개발에서 가장 중요한 기술 중 하나로, 클라이언트와 서버 간 데이터 교환을 단순하고 효율적으로 처리할 수 있도록 설계된 아키텍처 스타일입니다.

rest-api

 


REST API의 개념

1. REST란 무엇인가?

REST(Representational State Transfer)는 웹의 설계 원리를 기반으로 하는 아키텍처 스타일입니다. REST는 리소스(Resource)를 URL로 표현하고, HTTP 프로토콜을 사용하여 클라이언트와 서버 간 데이터를 교환합니다.

  • 특징:
    • 리소스 중심 설계: 데이터는 리소스로 표현되며, 고유한 URL로 식별됩니다.
    • HTTP 메서드 활용: GET, POST, PUT, DELETE 등을 사용해 리소스의 동작을 정의합니다.
    • 무상태성: 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다.

2. REST API와 RESTful API

RESTful API는 REST의 원칙을 충실히 따른 API를 의미합니다.

  • REST API는 리소스와 행동을 명확히 정의하며, 일관성을 유지하는 것이 중요합니다.
  • JSON, XML 등 데이터 포맷으로 요청과 응답을 처리합니다.

REST API 설계 원칙

1. 리소스 기반 URI 설계

REST API는 리소스를 중심으로 설계됩니다. 리소스를 나타내는 URI는 명사형으로 표현해야 합니다.

  • 예시:
    • 사용자 목록 조회: GET /users
    • 특정 사용자 조회: GET /users/{id}
    • 사용자 생성: POST /users
    • 사용자 수정: PUT /users/{id}
    • 사용자 삭제: DELETE /users/{id}

2. HTTP 메서드의 활용

REST API는 HTTP 메서드를 활용해 리소스와 상호작용합니다. 각 메서드는 특정 동작을 의미합니다:

메서드동작설명

GET 조회 리소스나 데이터 조회
POST 생성 새로운 리소스 생성
PUT 수정 기존 리소스 수정
DELETE 삭제 리소스 삭제

3. 상태 코드 활용

REST API는 HTTP 상태 코드를 사용하여 요청의 결과를 클라이언트에게 전달합니다.

상태 코드의미설명

200 OK 요청 성공
201 Created 새로운 리소스 생성 성공
400 Bad Request 잘못된 요청
404 Not Found 리소스를 찾을 수 없음
500 Internal Server Error 서버 내부 오류

4. JSON 형식의 데이터 표현

REST API는 주로 JSON 포맷을 사용해 데이터를 주고받습니다.

  • JSON 예제:
{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}

REST API 구현

1. 간단한 REST API 구현

REST API를 구현하기 위해 Python의 Flask 프레임워크를 사용할 수 있습니다. 아래는 간단한 사용자 관리 REST API의 예제입니다:

코드 예제

from flask import Flask, jsonify, request

app = Flask(__name__)

# 가상 데이터베이스
users = [
    {"id": 1, "name": "John Doe", "email": "john@example.com"},
    {"id": 2, "name": "Jane Smith", "email": "jane@example.com"}
]

# 사용자 목록 조회
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# 특정 사용자 조회
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = next((u for u in users if u["id"] == user_id), None)
    return jsonify(user) if user else ("User not found", 404)

# 사용자 생성
@app.route('/users', methods=['POST'])
def create_user():
    new_user = request.json
    new_user["id"] = len(users) + 1
    users.append(new_user)
    return jsonify(new_user), 201

# 사용자 수정
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = next((u for u in users if u["id"] == user_id), None)
    if user:
        user.update(request.json)
        return jsonify(user)
    return ("User not found", 404)

# 사용자 삭제
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    users = [u for u in users if u["id"] != user_id]
    return jsonify({"message": "User deleted successfully."})

if __name__ == '__main__':
    app.run(debug=True)

2. REST API 테스트

REST API는 Postman과 같은 도구를 사용해 쉽게 테스트할 수 있습니다.

  1. GET 요청:
    • URL: http://localhost:5000/users

응답:

json
[
    {"id": 1, "name": "John Doe", "email": "john@example.com"},
    {"id": 2, "name": "Jane Smith", "email": "jane@example.com"}
]

POST 요청:

  • URL: http://localhost:5000/users
  • Body

 

{
    "name": "Alice",
    "email": "alice@example.com"
}

응답:

{"id": 3, "name": "Alice", "email": "alice@example.com"}

REST API 활용 및 최적화

1. REST API의 활용

  1. 웹 애플리케이션 백엔드: REST API는 프론트엔드와 백엔드 간 데이터 교환의 중심 역할을 합니다.
  2. 모바일 애플리케이션: 앱과 서버 간 통신을 처리하는 데 REST API를 사용합니다.
  3. 사물 인터넷(IoT): 다양한 IoT 장치 간 데이터를 주고받는 데 REST API를 활용.

2. REST API 최적화

  1. 캐싱:
    • Redis와 같은 캐싱 도구를 사용해 자주 요청되는 데이터를 캐싱.
  2. 페이징 및 필터링:
    • 대량의 데이터를 처리할 때 페이징과 필터링을 추가.
@app.route('/users', methods=['GET'])
def get_users_paginated():
    page = int(request.args.get('page', 1))
    per_page = int(request.args.get('per_page', 10))
    start = (page - 1) * per_page
    end = start + per_page
    return jsonify(users[start:end])
  1. 보안 강화:
    • JWT(Json Web Token)나 OAuth2를 통해 인증과 권한 관리를 추가.

https://github.com/siilver94/rest-api

 

GitHub - siilver94/rest-api

Contribute to siilver94/rest-api development by creating an account on GitHub.

github.com

 


해시태그

#RESTAPI #API설계 #Python #Flask #데이터통신 #웹개발 #RESTful #API구현 #JSON #API보안

728x90