API 뿐만 아니라 일반 사이트에가도 다음과 같은 주소들을 많이 보게됩니다.
https://example.com?no=1&page=32
? 뒤에 오는 변수들을 매개변수(Query parameters)라고 부릅니다. 각 매개변수는 & 기호로 구분됩니다.
key = value와 같이 키 = 값의 쌍으로 정의됩니다.
# main.py
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users(limit: int):
return {"limit": limit}
if __name__ == "__main__":
uvicorn.run("main:app", reload = True)
위와 같은 main.py 파이썬 스크립트에 위와 같은 코드를 작성한 훈에 실행 시켜봅시다 !!
실행 완료후에 HTTPie를 사용해서 리눅스 터미널에 다음과 같은 명령어를 호출을 합시다 !!
$ http ':8000/users?limit=100'
이번에는 main.py 파일에 limit 값에 기본 값을 추가해서 값을 받지 않아도 되도록 코드를 작성해 봅시다 !!
import uvicorn
from fastapi import FastAPI
app = FastAPI()
#1_query_parameter의 /users와는 다른 주소
@app.get("/users/")
def get_users(limit: int = 100):
return {"limit" : limit}
if __name__ == "__main__":
uvicorn.run("main:app", reload=True)
위와 같이 작성을하면 limit에 대한 값을 받지 않아도 됩니다.
main.py 파일을 실행해서 http로 시작되는 부분을 CTRL 키를 누루른 상태에서 클릭을하면
이와 같이 인터넷 창이 나타나는 것을 알 수 있는데요 !!
뒷 부분에 docs를 추가해 엔터를 입력하면 Fastapi에 문서에 접속을 할 수 있습니다.
다음과 같은 문서를 볼 수 있는데, 우리가 limit의 기본 값을 100으로 설정한 것을 문서가 제대로 인식하고 있다는 것을 알 수 있습니다.
해당 문서에서 Try it out을 눌러보겠습니다.
Try it out을 누르면 다음과 같이 limit에 값을 수정할 수 있게 바뀌고 Execute 버튼이 활성화 되었음을 알 수 있습니다. Execute 버튼을 눌러 보겠습니다.
해당 버튼을 누르면 다음과 같이 우리에 호출에 대한 응답을 알 수 있습니다.
위와 같이 limit의 값을 Optional하게 하려면, None 값을 기본 값으로 주면됩니다. None 값을 주게되면 output Json은 null이 됩니다.
FastAPI는 경로에 매개변수가 없으면 쿼리 매개변수로 함수 매개변수를 받습니다.
그렇다면, 논리형의 경우, 어떻게 전달해야 될까요 .. ?
python의 경우, True이고, Json는 true입니다.
main.py의 코드를 다음과 같이 작성해 봅시다.
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users(is_admin: bool, limit: int = 100):
return {"is_admin":is_admin, "limit":limit}
if __name__ == '__main__':
uvicorn.run("main:app", reload=True)
다음과 같이 HTTPie를 코드를 실행해 보겠습니다.
http ':8000/users?is_admin=True'
다음과 같은 결과를 얻을 수 있습니다.
다음에는 true로 실행해 보겠습니다.
http ':8000/users?is_admin=true'
true로 실행해도 정상적으로 응답이 오는 것을 확인할 수 있습니다.
따라서, 아무거나 호출을 해도 됩니다. 위와 같은 상황이 가능한 이유는 FastAPI에서 사용하고 있는 pydantic 라이브러리 덕분에 True도 true도 가능하게 된 것입니다.
bool형인 경우 True, true, TRUE, 1 전부 True입니다. 심지어 on, yes도 그렇습니다.
'FastAPI' 카테고리의 다른 글
FastAPI 요청 본문(Request body) (0) | 2024.01.18 |
---|---|
문자열 열거형의 등장 (0) | 2024.01.17 |
순서 문제 (1) | 2024.01.15 |
경로 매개변수 (0) | 2024.01.15 |
HTTP 파이 (0) | 2024.01.15 |