티스토리 뷰

Python과 Flask 프레임워크를 사용한 REST API 구현의 간단한 예시다. 이 API는 기본적인 CRUD (Create, Read, Update, Delete) 작업을 통해 책 목록을 관리한다. Flask를 사용한 REST API의 기본 구현으로, REST 원칙이 실제로 어떻게 적용되는지 보여준다. 각 엔드포인트는 REST 원칙을 따르며, 클라이언트는 GET, POST, PUT, DELETE와 같은 표준 HTTP 메서드를 사용해 리소스(이 경우 book)을 조작할 수 있다.

 

  1. Flask 설치
    : Flask가 설치되어 있지 않은 경우 pip를 사용해 설치할 수 있다.
    pip install Flask
  2. REST API 생성
    1. GET /api/books: 모든 책 목록을 가져온다.
    2. GET /api/books/<book_id>: 특정 책을 ID로 가져온다.
    3. POST /api/books: 새 책을 추가한다. 클라이언트는 최소한 제목(예 - {"title": "New Book", "author": "Author Name"}) 이 포함된 JSON 페이로드를 보내야 한다.
    4. PUT /api/books/<book_id>: 기존 책의 제목 또는 저자를 업데이트한다.
    5. DELETE /api/books/<book_id>: ID로 책을 삭제한다.
      from flask import Flask, jsonify, request, abort
      
      app = Flask(__name__)
      
      # Sample data: list of books
      books = [
          {"id": 1, "title": "The Great Gatsby", "author": "F. Scott Fitzgerald"},
          {"id": 2, "title": "1984", "author": "George Orwell"},
          {"id": 3, "title": "To Kill a Mockingbird", "author": "Harper Lee"}
      ]
      
      # GET all books
      @app.route('/api/books', methods=['GET'])
      def get_books():
          return jsonify(books)
      
      # GET a specific book by ID
      @app.route('/api/books/<int:book_id>', methods=['GET'])
      def get_book(book_id):
          book = next((book for book in books if book['id'] == book_id), None)
          if book is None:
              abort(404)
          return jsonify(book)
      
      # POST a new book
      @app.route('/api/books', methods=['POST'])
      def create_book():
          if not request.json or not 'title' in request.json:
              abort(400)
          new_book = {
              "id": books[-1]['id'] + 1 if books else 1,  # Auto-increment ID
              "title": request.json['title'],
              "author": request.json.get('author', "Unknown")
          }
          books.append(new_book)
          return jsonify(new_book), 201
      
      # PUT (Update) an existing book by ID
      @app.route('/api/books/<int:book_id>', methods=['PUT'])
      def update_book(book_id):
          book = next((book for book in books if book['id'] == book_id), None)
          if book is None:
              abort(404)
          if not request.json:
              abort(400)
          book['title'] = request.json.get('title', book['title'])
          book['author'] = request.json.get('author', book['author'])
          return jsonify(book)
      
      # DELETE a book by ID
      @app.route('/api/books/<int:book_id>', methods=['DELETE'])
      def delete_book(book_id):
          book = next((book for book in books if book['id'] == book_id), None)
          if book is None:
              abort(404)
          books.remove(book)
          return jsonify({"result": True})
      
      # Run the Flask app
      if __name__ == '__main__':
          app.run(debug=True)


  3. API 테스트
    : Postman, curl 또는 간단한 프론트엔드 생성을 통해 REST API를 테스트 할 수 있다. 아래는 curl을 사용해 book 생성을 테스트 해본 예제다.
    curl -X POST http://127.0.0.1:5000/api/books \
    -H "Content-Type: application/json" \
    -d '{"title":"New Book", "author":"Author Name"}'



 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형