FastAPI 공식문서 따라하기[23] - Path Operation Configuration
https://fastapi.tiangolo.com/tutorial/handling-errors/ 공식문서 따라하는 글
☑️ Path Operation Configuration
Path
경로에 몇 가지 기능을 더 넣을 수 있다고 한다.
☑️ Response Status Code
status_code
를 이용하여 HTTP상태코드를 전다할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from fastapi import FastAPI, status
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
tags: set[str] = set()
@app.post("/items/", response_model=Item, status_code=status.HTTP_201_CREATED)
async def create_item(item: Item):
return item
이렇게 작성하고, post
요청에 성공하면 201
HTTP상태값을 받을 수 있다.
참고로
import status
를fastapi
에서 하나starlette
에서 하나 같다.
☑️ Tags
list
나 str
형태의 tags
를 PassParameter
에 넘길 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
tags: set[str] = set()
@app.post("/items/", response_model=Item, tags=["items"])
async def create_item(item: Item):
return item
@app.get("/items/", tags=["items"])
async def read_items():
return [{"name": "Foo", "price": 42}]
@app.get("/users/", tags=["users"])
async def read_users():
return [{"username": "johndoe"}]
보면 tags지정한대로 분리해서 OpenAPI
인터페이스에 나타나는걸 볼 수 있다.
또한, 큰 애플리케이션의 경우 Tags를 매번 지정하다간 헷갈릴수도 있고 하나로 관리하고 싶기에
Enum
을 사용해서 나타낼 수도 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from enum import Enum
from fastapi import FastAPI
app = FastAPI()
class Tags(Enum):
items = "items"
users = "users"
@app.get("/items/", tags=[Tags.items])
async def get_items():
return ["Portal gun", "Plumbus"]
@app.get("/users/", tags=[Tags.users])
async def read_users():
return ["Rick", "Morty"]
☑️ Summary and description
summary
와 description
도 파라미터에서 사용할 수 있는데 이는 무엇이냐..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
tags: set[str] = set()
@app.post(
"/items/",
response_model=Item,
summary="Create an item",
description="Create an item with all the information, name, description, price, tax and a set of unique tags",
)
async def create_item(item: Item):
return item
이렇게 설명과 간단한 타이틀을 설정할 수 있다.
또한 markdown
스타일로 설명을 적을 수 있다고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
tags: set[str] = set()
@app.post("/items/", response_model=Item, summary="Create an item")
async def create_item(item: Item):
"""
Create an item with all the information:
- **name**: each item must have a name
- **description**: a long description
- **price**: required
- **tax**: if the item doesn't have tax, you can omit this
- **tags**: a set of unique tag strings for this item
"""
return item
☑️ Response description
response_description
을 통해 response description을 명시해줄 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
@app.post(
"/items/",
response_model=Item,
response_description="The created item",
)
async def create_item(item: Item):
return item
☑️ Deprecate a path operation
deprecated
를 명시하여 해당 라우터의 기능을 사용하지 않는다고 명시할 수 있다.
1
2
3
4
5
6
7
8
9
from fastapi import FastAPI
app = FastAPI()
@app.get("/elements/", tags=["items"], deprecated=True)
async def read_elements():
return [{"item_id": "Foo"}]
하지만 요청을 하면 잘간다.
OpenAPI
에서 명시적으로 나타내주기 위해 사용하는 것 같다.
This post is licensed under CC BY 4.0 by the author.