본문 바로가기

FastAPI

(16)
05-1. FastAPI, Query Parameter Filtering 2021.01.06 - [FastAPI] - 05. Fast API, REST API Query Parameters 설정 저번 Query Parameter 글에서 한 분이 댓글에 질문을 남겨주셨다. 필터링 처리를 쿼리파라미터로 7개 이상으로 받게될 경우 어떻게 해야하나요? 파이썬 패킹 처리를 할 것 같은데... FastAPI에서 어떻게 하는지 궁금하네요 이 부분은 나도 궁금해서 한번 실험을 해보았다. from fastapi import Query my_query_parmas = {"a": Query(...), "b": Query(None)} @app.get("/") async def p(*args, **kwargs): pass @app.get("/test") async def p(x: dict = my_..
15. Fast API 응답 코드 설정 지금 현재는 Rest API의 응답은 아마 status code가 200일 것이다. 하지만 이는 HTTP status code와는 약간은 동떨어진 응답 코드이다. 일반적으로 get은 200, post는 201, delete는 204의 응답 코드를 가진다. 그렇다면 fast api에서도 해당 코드를 반환하게 만들어야한다. @app.post("/items/", status_code=201) async def create_item(name: str): return {"name": name} 위와 같이 status_code=201로 선언하여 api 함수가 정상적으로 종료되면 응답 코드로 201을 반환하게 만들 수 있다. /docs에는 아래와 같이 자동적으로 바뀌게 된다. Shortcut to remember t..
14. Fast API Syntactic sugar / 꿀팁 Reduce Duplication 이전의 내용에서 유저에 관한 모델을 생각해보자. input model은 password가 있어야하고, output model은 password를 내보내지 말아야하고, database model은 hashed password가 필요하다. 이를 단순히 작성하면 아래와 같을 것이다. class UserIn(BaseModel): username: str password: str email: EmailStr full_name: Optional[str] = None class UserOut(BaseModel): username: str email: EmailStr full_name: Optional[str] = None class UserInDB(BaseModel): usernam..
13. Fast API Response Model (Output 데이터 형식) Fast API에서는 response_model이라는 인자로 손쉽게 데이터를 정형화하여 내보낼 수 있다. response model은 pydantic으로 정의된 모델이나 이를 담는 데이터 형식이 될 수 있다. from typing import List, Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None tags: List[str] = [] @app.post("/items/", response_model=Item) a..
12. Fast API, 쿠키와 헤더 받기 Query와 Path와 같이 쿠키와 헤더를 설정할 수 있다. Cookie from typing import Optional from fastapi import Cookie, FastAPI app = FastAPI() @app.get("/items/") async def read_items(ads_id: Optional[str] = Cookie(None)): return {"ads_id": ads_id} Cookie는 Path와 Query의 형제 Class이며 Param클래스를 똑같이 상속받는다. 이 말은 Cookie또한 함수라는 것! Header Cookie 설정한 것과 똑같이 하면 된다. Header 또한 함수! from typing import Optional from fastapi import Fa..
11. Fast API, Schema 예시 설정 및 데이터 타입 docs에서 Json 스키마에 대해 추가적인 정보를 적어줄 수 도 있다. JSON 스키마를 정의할 수 있는 방법은 여러가지가 있다. Pydantic schma_extra class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None class Config: schema_extra = { "example": { "name": "Foo", "description": "A very nice Item", "price": 35.4, "tax": 3.2, } } pydantic 모델에서 Config에 schema_extra를 정의하면 된다. Field, Path, Query, Body에..
10. Fast API, Body - Nested Models Pydantic 모델을 이용하여 Nested Model도 구현할 수 있다. List Fields class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None tags: list = [] tags는 어떠한 자료형이든 담을 수 있는 list가 된다. from typing import List, Optional tags: List[str] = [] 위와 같이 typing에서 List를 import하여 List[str]과 같이 쓰면, str만이 요소가 되는 리스트가 된다. Set Set 또한 내부 요소를 제한할 수 있다. from typing import Optional, Set ..
09. Fast API, Body - Multiple Parameters, Field Mixed Path, Query, Request Body parameter 이제 모든 parameter들의 선언 방법에 대해 알아보았으니, 아래의 코드를 보며 어떤 parameter인지 보자. class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.put("/items/{item_id}") async def update_item( *, item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000), q: Optional[str] = None, item: Optional[Item] = Non..