요약 정리

REST API란 무엇인가?

코드로 칼퇴하기 2024. 5. 21. 09:25
반응형

REST API란 무엇인가?

REST API란?

REST(Representational State Transfer) API는 웹 서비스 설계 아키텍처 중 하나로, 클라이언트와 서버 간의 상호작용을 원활하게 하기 위한 일련의 원칙을 정의합니다. REST는 HTTP 프로토콜을 기반으로 하여 데이터를 주고받는 데 사용되며, 웹 애플리케이션 개발에서 널리 사용됩니다.

REST의 주요 원칙

REST 아키텍처는 다음과 같은 주요 원칙을 따릅니다:

  1. 자원(리소스) 기반
    • 모든 것은 자원으로 간주되며, 각 자원은 고유한 URI(Uniform Resource Identifier)로 식별됩니다.
    • 예: http://example.com/users/123는 사용자 자원 중 ID가 123인 사용자를 식별합니다.
  2. 무상태성(Stateless)
    • 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다.
    • 모든 필요한 정보는 요청에 포함되어야 합니다.
  3. 캐시 가능(Cacheable)
    • 응답은 캐시 가능해야 하며, 이를 통해 성능을 최적화할 수 있습니다.
    • HTTP 헤더를 사용하여 캐싱 관련 정보를 제공할 수 있습니다.
  4. 일관된 인터페이스(Uniform Interface)
    • 클라이언트와 서버가 일관된 방식으로 상호작용할 수 있도록 합니다.
    • HTTP 메서드(GET, POST, PUT, DELETE 등)와 표준 응답 코드(200, 404, 500 등)를 사용합니다.
  5. 계층화 시스템(Layered System)
    • 클라이언트는 중간 서버를 통해 서버와 통신할 수 있으며, 이는 보안, 로드 밸런싱 등의 이점을 제공합니다.

REST API의 HTTP 메서드

REST API는 주로 다음과 같은 HTTP 메서드를 사용하여 자원에 대해 작업을 수행합니다:

메서드 설명 사용 예
GET 자원의 상태나 정보를 조회합니다. `GET /users/123` - ID가 123인 사용자 조회
POST 새로운 자원을 생성합니다. `POST /users` - 새로운 사용자 생성
PUT 자원의 상태나 정보를 갱신합니다. `PUT /users/123` - ID가 123인 사용자 정보 갱신
DELETE 자원을 삭제합니다. `DELETE /users/123` - ID가 123인 사용자 삭제

REST API의 장점

  1. 유연성과 확장성
    • REST API는 HTTP 프로토콜을 사용하므로, 다양한 플랫폼과 언어에서 쉽게 구현하고 확장할 수 있습니다.
  2. 표준화된 인터페이스
    • 표준 HTTP 메서드와 상태 코드를 사용하므로, 일관된 인터페이스를 제공합니다.
  3. 성능 최적화
    • 캐싱을 통해 응답 속도를 높일 수 있으며, 무상태성 덕분에 서버 리소스 관리가 용이합니다.

REST API의 단점

  1. 복잡한 요청 처리
    • 복잡한 쿼리나 트랜잭션 처리는 REST API에서 구현하기 어렵습니다.
  2. HTTP 프로토콜 의존성
    • REST API는 HTTP 프로토콜에 의존하므로, 다른 프로토콜을 사용하는 환경에서는 제한적일 수 있습니다.

REST API 설계 예시

아래는 간단한 REST API 설계 예시입니다. 이 예시는 사용자 관리 시스템을 가정한 것입니다.

  • GET /users: 모든 사용자 목록을 조회합니다.
  • GET /users/{id}: 특정 ID를 가진 사용자의 정보를 조회합니다.
  • POST /users: 새로운 사용자를 생성합니다.
  • PUT /users/{id}: 특정 ID를 가진 사용자의 정보를 갱신합니다.
  • DELETE /users/{id}: 특정 ID를 가진 사용자를 삭제합니다.

REST API 설계 시 고려사항

  1. 명확하고 일관된 URI
  2. 적절한 HTTP 메서드 사용
    • 자원에 대한 작업을 수행할 때 적절한 HTTP 메서드를 사용합니다.
    • 예: 데이터를 조회할 때는 GET, 새로운 데이터를 생성할 때는 POST를 사용합니다.
  3. HTTP 상태 코드 사용
    • 클라이언트에게 요청의 결과를 명확하게 전달하기 위해 적절한 HTTP 상태 코드를 사용합니다.
    • 예: 요청이 성공했을 때는 200 OK, 리소스를 찾을 수 없을 때는 404 Not Found를 사용합니다.

REST API의 실제 예시

아래는 실제로 간단한 REST API 서버를 파이썬 Flask를 사용해 구현하는 예시입니다.

from flask import Flask, jsonify, request

app = Flask(__name__)

# 임시 데이터 저장
users = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
    {'id': 3, 'name': 'Charlie'}
]

# 모든 사용자 조회
@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)
    if user:
        return jsonify(user)
    else:
        return jsonify({'error': 'User not found'}), 404

# 새로운 사용자 생성
@app.route('/users', methods=['POST'])
def create_user():
    new_user = request.get_json()
    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:
        updated_user = request.get_json()
        user.update(updated_user)
        return jsonify(user)
    else:
        return jsonify({'error': '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 '', 204

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

 

 

이 글을 통해 REST API의 기본 개념과 주요 원칙, HTTP 메서드, 설계 예시 등을 이해할 수 있습니다. REST API 설계 시 고려해야 할 사항들을 숙지하고 실제 프로젝트에 적용해 보세요.