<Python> RESTful API 개발과 사용

반응형

 

웹 기반 서비스에서, 데이터 리소스를 가져오고 처리하는 데 사용할 수 있는 인터페이스를 제공하는 방법 중 하나로 RESTful API가 있습니다.

이 글에서는 파이썬에서 RESTful API를 개발하고 사용하는 방법에 대해 알아봅니다.

 

RESTful API란?

 

RESTful API는 REST(REpresentational State Transfer)를 따르는 웹 API입니다. REST는 웹 서비스 및 웹 서버와 클라이언트 간 통신 디자인 아키텍처 원리의 집합입니다. RESTful API를 사용하면 웹 서비스 상의 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행할 수 있습니다.

 

API 개발을 위한 라이브러리 설치

 

파이썬에서 RESTful API를 구현하려면 Flask와 Flask-RESTful, 이 두 가지 라이브러리를 사용할 수 있습니다. 설치는 다음 명령어를 사용해 진행합니다.

 

pip install Flask Flask-RESTful

 

Flask-RESTful을 사용한 간단한 API 생성

 

먼저 기본 틀을 사용한 간단한 API를 만들어 봅니다.

from flask import Flask
from flask_restful import Resource, Api

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

class HelloWorld(Resource):
    def get(self):
        return {"message": "Hello, World!"}

api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
    app.run(debug=True)

 

이제 Flask 애플리케이션을 실행하면, 루트 URL 즉, /에서 HelloWorld 리소스를 반환하는 API를 사용할 수 있습니다.

데이터 리소스 생성 및 작업

 

목록 형태의 데이터를 리소스로 사용하면서 GET, POST, PUT, DELETE 메소드를 구현해 봅니다.

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

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

items = []

class Item(Resource):
    def get(self, item_name):
        item = next(filter(lambda x: x["name"] == item_name, items), None)
        return {"item": item}, 200 if item else 404

    def post(self, item_name):
        if next(filter(lambda x: x["name"] == item_name, items), None):
            return {"message": f"An item with name '{item_name}' already exists."}, 400

        data = request.get_json()
        item = {"name": item_name, "price": data["price"]}
        items.append(item)
        return item, 201

    def put(self, item_name):
        data = request.get_json()
        item = next(filter(lambda x: x["name"] == item_name, items), None)
        if item is None:
            item = {"name": item_name, "price": data["price"]}
            items.append(item)
        else:
            item.update(data)
        return item

    def delete(self, item_name):
        global items
        items = list(filter(lambda x: x["name"] != item_name, items))
        return {"message": "Item deleted"}

api.add_resource(Item, "/item/<string:item_name>")
if __name__ == "__main__":
    app.run(debug=True)

이 API는 다음 기능을 수행할 수 있습니다:

  • 아이템 이름으로 아이템 조회(GET)
  • 아이템 추가(POST)
  • 아이템 정보 갱신(PUT)
  • 아이템 삭제(DELETE)

 

API 사용하기

 

이제 애플리케이션을 실행하고 웹 브라우저, Postman, 또는 curl과 같은 도구를 사용하여 API 요청을 보낼 수 있습니다.

 

감사합니다.

Designed by JB FACTORY