본문 바로가기

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

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

시스템 개발을 하는데 내부적으로 자연어처리를 돌려야 하는 상황이라 파이썬을 사용한 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페이지..

반응형

댓글