본문 바로가기

Python/Python Web Framework6

FastAPI 05. 반환 모델과 유사한 모델들 생성하기 반환 모델 작성하기 FastAPI는 기본적으로 사용하는 모델을 추정하여 입출력값을 나타내지만 자동적으로 표현해 주는 기능에만 의존할 수는 없다. 예를 들어 게시판의 글의 목록과 각각의 글을 불러오는 API가 있을 때, 다음과 같이 설계할 수 있다. 게시판 글 목록 : 글 번호, 글 제목, 조회 수, 댓글 수, 작성일 게시판 글 : 글 제목, 글 내용, 조회수, 댓글 수, 댓글 목록, 작성일 이러한 경우 각 API에 맞도록 반환모델을 기록하는것이 개발에 도움이 될 수 있다. FastAPI에서 반환 모델을 명시하는 방법은 크게 2가지이다. 첫 번째는 Python함수 반환값을 나타내듯이 ->를 사용하여 반환 타입을 입력하는 방법이고, 다른 방식은 response_model값을 지정하는 방식이다. @app.po.. 2023. 1. 18.
FastAPI 04. 바디의 예시 만들기 OpenAPI를 지원하는 FastAPI를 더 잘 활용하는 방법은 스키마 활용이라고 생각한다. API를 작성하고, 간단하게 설명해 줄 수 있지만, API를 제대로 작성하고 또 제개도 활용학 위해서는 OpenAPI를 따라 스키마를 작성하는 것이 필요하다고 생각한다. 그렇게 한다면 입출력 예시뿐만 아니라 가능한 상태 코드 등을 쉽게 이해할 수 있다. 이는 API 개발뿐만 아니라 테스트나 유지 보수에도 도움 되는 작업이라고 생각한다. FastAPI에서는 이를 달성하기 위해 Pydantic을 사용하는 방법과 FatsAPI에서 제공하는 Body()함수를 사용하는 방법을 제공한다. Pydantic을 사용하는 방법 class Item(BaseModel): id: int name: str description: str .. 2023. 1. 16.
FastAPI 03. 리퀘스트 바디 API 서버에서 사용자 입력을 받기 위하여 경로 매개변수, 퀘리 매개변수도 사용하지만 일반적으로 리퀘스트 바디를 많이 사용할 것이다. 특히 많은 입력이 필요한 경우 매개변수를 활용하여 URL을 조작하는 것보다 JOSN을 활용하여 바디로 통신하는 것이 수월하다. 이전에 리퀘스트 바디는 Pydantic을 사용한다고 하였다. 이번에는 바디를 더욱 다양하게 활용하는 방법을 알아볼것이다. 여러 개의 매개변수, 바디 사용하기 @app.post("/items/{item_id}") async def get_item( *, item_id: int = Path(title="The ID of item to get", ge=0, le=10000), q: str | None = Query(default=None, max_len.. 2023. 1. 10.
FastAPI 02. 경로, 쿼리 매개변수 검증 API를 만들게 되면 경로 매개변수나 쿼리 매개변수 검증이 필요한 경우가 있다. 예를 들어 경로 매개변수가 0 이상 정수값이어야 한다거나, 쿼리 매개변수의 문자열의 길이를 제한하는 등 검증을 한다. FastAPI에서는 Query, Path라는 편리한 방법을 제공한다. 쿼리 파라미터 @app.get("/items/") async def read_item(q: str): return q 우선 다음과 같은 API에서 시작하자, 하나의 쿼리 파라미터 q를 입력받는 경우를 가정했을 때 상황을 구체화 해보자. from fastAPI import FastAPI, Query @app.get("/items/") async def read_item(q: str = Query(defalut=None)): return q 함.. 2023. 1. 6.
FastAPI 01. 첫걸음 FastAPI FastAPI는 다른 Python 웹 프레임워크에 비하여 비교적 최근에 공개되었지만, 많은 관심을 받고 있다. FastAPI의 주요 특징으로는 빠른 속도, 빠른 코드 작성과 적은 버그, 쉽고 간결하며 견고함 등이 있다. 웹과 관련된 부분은 Starlette을, 데이터와 관련된 부분은 Pydantic을 사용한다. 또한 대화형 API 문서로 Swagger UI, ReDoc을 제공한다. FastAPI 첫걸음 from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello, FastAPI"} 기본적인 FastAPI앱 구조는 다음과 같다. FastAPI 클래스를 불러와서 나의 앱 객.. 2023. 1. 4.
Django DRF에서 serializer와 pydantic 들어가기에 앞서 1. DRF는 Django REST Framework를 의미합니다. 2. pydantic은 Python validation을 위한 라이브러리입니다. 이 글의 목적 - DRF를 사용한다면 serializer를 사용하는 것이 더 좋다고 생각합니다. - 하지만, pydantic을 활용하여 어느 정도 대체 가능한지 확인해보기 위함입니다. pydantic 공식문서의 벤치마크에 따르면 data validation에서는 serializer가 12배 이상 느리다는 평가가 있어 궁금증을 가지게 되었습니다. 코드 비교 및 설명 - 코드 : https://github.com/mintropy/Python-web-framework GitHub - mintropy/Python-web-framework Contri.. 2022. 2. 26.