Chapter 2-3 Flask-RESTful API

2025. 4. 18. 10:30·Flask

📌 Flask-RESTful API 활용하여 REST API 생성 - 상세 가이드

1. flask-restful api 설치

Flask-RESTful은 Flask의 확장 모듈로, Flask 애플리케이션에서 RESTful API를 빠르게 구축할 수 있게 해줍니다. 이를 설치하려면 pip를 사용하여 설치합니다.

설치 명령어

> pip install flask-restful

이후 Flask 애플리케이션에서 Api와 Resource 클래스를 사용하여 RESTful API를 쉽게 만들 수 있습니다.


2. Library Import

Flask 애플리케이션을 설정하고 API를 추가하려면 Flask와 함께 flask-restful의 Api와 Resource 클래스를 가져와야 합니다.

필요한 라이브러리

from flask import Flask
from flask_restful import Api, Resource
  • Flask: 웹 애플리케이션을 구동하는 기본 라이브러리입니다.
  • Api: Flask 애플리케이션에 RESTful API를 추가하는 클래스입니다.
  • Resource: 각 리소스(API 엔드포인트)를 구현할 때 사용되는 클래스입니다.

3. Flask-RESTful API를 활용하여 API 구축

Flask-RESTful을 사용하여 간단한 아이템 관리 API를 구축할 수 있습니다. 이 API는 아이템을 조회, 추가, 업데이트, 삭제할 수 있는 기능을 제공합니다.

API 구성 흐름

  1. GET: 특정 아이템을 조회합니다.
  2. POST: 새로운 아이템을 추가합니다.
  3. PUT: 기존 아이템의 정보를 업데이트합니다.
  4. DELETE: 아이템을 삭제합니다.

app.py - Flask 애플리케이션 설정

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

items = []  # 간단한 데이터베이스 역할을 하는 리스트

class Item(Resource):
    # 특정 아이템 조회
    def get(self, name):
        for item in items:
            if item['name'] == name:
                return item
        return {'message': 'Item not found'}, 404

    # 새 아이템 추가
    def post(self, name):
        for item in items:
            if item['name'] == name:
                return {'message': f"An item with name '{name}' already exists."}, 400

        data = request.get_json()  # 클라이언트로부터 받은 JSON 데이터
        item = {'name': name, 'price': data['price']}
        items.append(item)
        return item, 201
    
    # 아이템 업데이트
    def put(self, name):
        data = request.get_json()
        for item in items:
            if item['name'] == name:
                item['price'] = data['price']
                return item

        # 아이템이 존재하지 않으면 새로운 아이템을 추가
        new_item = {'name': name, 'price': data['price']}
        items.append(new_item)
        return new_item
    
    # 아이템 삭제
    def delete(self, name):
        global items
        items = [item for item in items if item['name'] != name]
        return {'message': 'Item deleted'}

api.add_resource(Item, '/item/<string:name>')  # 경로 추가

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

코드 흐름 설명

  1. Item 클래스는 각 HTTP 메소드(GET, POST, PUT, DELETE)를 정의하는 클래스입니다.
  2. get(self, name): name 파라미터를 통해 특정 아이템을 조회합니다. 만약 해당 아이템이 없다면 404 상태 코드를 반환합니다.
  3. post(self, name): 새로운 아이템을 추가합니다. 기존 아이템이 있다면 중복 메시지를 반환하고, 없으면 새 아이템을 리스트에 추가합니다.
  4. put(self, name): 아이템을 수정합니다. 존재하지 않으면 새 아이템을 추가합니다.
  5. delete(self, name): 지정된 name의 아이템을 삭제합니다.

4. Flask-RESTful API 장/단점

장점

  1. 간단한 RESTful API 개발:
    • Flask-RESTful은 간단한 코드로 RESTful API를 구현할 수 있습니다. 기본적으로 리소스(Resource) 개념을 사용하여 API를 구현할 수 있어 빠른 개발이 가능합니다.
  2. 직관적인 코드:
    • Resource 클래스를 사용해 각 API 엔드포인트를 정의하는 방식은 직관적이고 이해하기 쉽습니다.
    • 각 메소드(GET, POST, PUT, DELETE)를 클래스 내에서 처리할 수 있어 가독성이 좋습니다.
  3. 낮은 러닝 커브:
    • Flask는 작고 간단한 웹 프레임워크로 학습하기 쉬운 특성을 가지고 있으며, Flask-RESTful 또한 이를 기반으로 추가된 기능이므로 학습이 쉽습니다.

단점

  1. 자동 문서화 도구의 부족:
    • Swagger나 OpenAPI 같은 API 문서화 도구를 기본적으로 제공하지 않아서, 개발자가 자동으로 API 문서를 생성하거나 구성해야 합니다. 이를 위해 별도의 설정이 필요합니다.
  2. 성능:
    • Flask 자체가 경량 웹 프레임워크이기 때문에, 대규모 애플리케이션에서는 성능상 한계가 있을 수 있습니다.
    • 대규모 서비스에는 Django REST Framework 같은 더 강력한 대체 프레임워크가 필요할 수 있습니다.

5. 기능별 코드 분리 (모듈화)

app.py - Flask 애플리케이션 설정

from flask import Flask
from flask_restful import Api
from resources.item import Item

app = Flask(__name__)
api = Api(app)

api.add_resource(Item, '/item/<string:name>')

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

resources/item.py - 아이템 리소스 클래스

from flask_restful import Resource, request

items = []  # 간단한 데이터베이스 역할을 하는 리스트

class Item(Resource):
    # 특정 아이템 조회
    def get(self, name):
        for item in items:
            if item['name'] == name:
                return item
        return {'message': 'Item not found'}, 404

    # 새 아이템 추가
    def post(self, name):
        for item in items:
            if item['name'] == name:
                return {'message': f"An item with name '{name}' already exists."}, 400

        data = request.get_json()
        item = {'name': name, 'price': data['price']}
        items.append(item)
        return item, 201
    
    # 아이템 업데이트
    def put(self, name):
        data = request.get_json()
        for item in items:
            if item['name'] == name:
                item['price'] = data['price']
                return item

        # 아이템이 존재하지 않으면 새로운 아이템을 추가
        new_item = {'name': name, 'price': data['price']}
        items.append(new_item)
        return new_item
    
    # 아이템 삭제
    def delete(self, name):
        global items
        items = [item for item in items if item['name'] != name]
        return {'message': 'Item deleted'}

6. API 테스트와 사용 방법

API 테스트를 위해 Postman을 사용할 수 있습니다. Postman은 API를 호출하고 응답을 쉽게 테스트할 수 있는 도구입니다.

  1. 아이템 조회: GET /item/<name> → 특정 아이템 조회
  2. 아이템 추가: POST /item/<name> → 새 아이템 추가
    • 요청 본문: { "price": 20 }
  3. 아이템 업데이트: PUT /item/<name> → 기존 아이템 가격 수정
    • 요청 본문: { "price": 30 }
  4. 아이템 삭제: DELETE /item/<name> → 아이템 삭제

Postman을 사용하여 테스트

  1. GET 요청: /item/item_name
  2. POST 요청: /item/item_name (body에 JSON 데이터 추가)
  3. PUT 요청: /item/item_name (body에 업데이트된 JSON 데이터 추가)
  4. DELETE 요청: /item/item_name

'Flask' 카테고리의 다른 글

Chapter 2-5 Flask-Smorest 활용하여 REST API 생성  (0) 2025.04.18
Chapter 2-4 Flask-Smorest 활용하여 REST API 생성  (0) 2025.04.18
Chapter 2-2 Jsonify란?  (0) 2025.04.18
Chapter 2-1 REST API 개념 정리 및 해석  (0) 2025.04.18
Chapter 1-6 Flask 프로젝트 세팅  (0) 2025.04.17
'Flask' 카테고리의 다른 글
  • Chapter 2-5 Flask-Smorest 활용하여 REST API 생성
  • Chapter 2-4 Flask-Smorest 활용하여 REST API 생성
  • Chapter 2-2 Jsonify란?
  • Chapter 2-1 REST API 개념 정리 및 해석
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (783) N
      • Python (32)
      • 프로젝트 (105) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    smartphonedurability
    btsdischarge
    basalcellcarcinoma
    youngprofessionals
    bts
    remittance
    livebroadcast
    btsreunion
    hotcoffeecase
    life reflection
    chatgpterror
    travel ban
    homebartrend
    chinanightlife
    gpterror
    americaparty
    titaniumcase
    lawsuitculture
    college reunions
    RM
    classaction
    btsjungkook
    newpoliticalparty
    americanlaw
    btscomeback
    self-growth
    뷔
    urbantrends
    global politics
    trumpmuskclash
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 2-3 Flask-RESTful API
상단으로

티스토리툴바