Study/Python

api 서버 구축을 위한 라이브러리 탐색

I'm 영서 2024. 7. 3. 08:53
반응형

시스템 개발을 하는데 내부적으로 자연어처리를 돌려야 하는 상황이라 파이썬을 사용한 api 구축이 필요한 상황이 됐다. 

 

물론 다른 언어를 사용해서 내부로직화 할 수는 있지만 개발 초기다 보니, 파이썬으로 변경하는 편이 빠를것 같아 선택했다.

 

 

내가 찾아본 라이브러리는

총 5개로

Flask, FastAPI, Django Rest Framework, Bottle, Falcon 

이다.

 

각기 라이브러리의 장, 단점과 기본적인 형태를 알아보았다.

 

Flask 

- 최소한의 코어기능, 필요한 기능은 확장을 통해 추가.

- 데코레이터를 사용한 라우팅

- Jinja2 템플릿 엔진 사용

- ORM, 인증, 세션관리 등 다양한 확장 패키지 사용 가능

*유연하고 확장가능하여 프로토타입에 적합

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api', methods=['GET'])
def api():
    data = {"message": "Hello, World!"}
    return jsonify(data)

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

 

FastAPI

- 비동기 기능 지원, Pydantic을 사용한 데이터 검증

- Falsk와 유사한 데코레이팅 방식으로 라우팅하여, 경로 파라미터와 쿼리 파라미터를 타입힌트를 통해 자동 처리

- Swagger UI와 ReDoc를 통한 자동 API 문서화

*비동기 프로그래밍 지원, 빠른 개발속도, 높은 성능

from fastapi import FastAPI

app = FastAPI()

@app.get('/api')
def read_root():
    return {"message": "Hello, World!"}

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

 

Django Rest Framework

- Django의 ORM, 인증, 권한관리 등과 통합된 구조

- URL 패톤을 통한 라우팅, ViewSet을 통한 CRUD 기능 자동화

- Serializer 클래스를 통한 데이터 직렬화 및 역직렬화 처리

 *Django의 ORM및 기타 기능들과 통합이 용이

from django.urls import path
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class HelloWorld(APIView):
    def get(self, request):
        return Response({"message": "Hello, World!"}, status=status.HTTP_200_OK)

urlpatterns = [
    path('api/', HelloWorld.as_view(), name='hello_world')
]

 

 

Bottle

- 단순한 코어구조로 단일 파일로 운영 가능

- 데코레이터를 사용한 라우팅

- SimpleTemplateEngine 사용

 *간단한 프로젝트에 적합

 

from bottle import Bottle, run, response

app = Bottle()

@app.route('/api')
def api():
    response.content_type = 'application/json'
    return {"message": "Hello, World!"}

if __name__ == '__main__':
    run(app, host='0.0.0.0', port=8080)

 

Falcon

- 단순한 코어구조

- URL 템플릿을 사용한 라우팅

- reponse, redicrect를 직접처리

 *고 트래픽에 적합함.

 

import falcon

class HelloWorldResource:
    def on_get(self, req, resp):
        resp.media = {"message": "Hello, World!"}

app = falcon.App()
app.add_route('/api', HelloWorldResource())

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    with make_server('', 8000, app) as httpd:
        print('Serving on port 8000...')
        httpd.serve_forever()

 

 

여기서 내 선택은 FastAPI였는데, 다른것보다 docs 페이지를 만들어 주는 부분이 매우 편리했던게 크다..

fastapi 만들고 실행시키면 자동으로 생성해주는 docs페이지..

반응형