fastapi github: https://github.com/fastapi/fastapi
app
).대안:프로젝트이름,src등entrypoint:프로그래밍 언어에서 최상위코드가 실행되는 시작점 또는 프로그램 진입점
main.py
(또는app.py):FastAPI의 애플리케이션과 Router설정model.py
: MLmodel에 대한 클래스와 함수정의pip 를 대체하는 패키지 매니저.
pyproject.toml
을 기준으로 여러툴들의 config를 명시적으로관리설치방법:https://python-poetry.org/docs/#installing-with-pipx
대화 형식으로 패키지 설치 가능,
-Dependency(프로덕션용),DevelopmentDependency(Dev용)
-> 개발 환경마다 필요한 패키지 분리.
pyproject.toml에 설정 저장
Poetry Shell활성화
가상환경 진입.
Poetry Install
pyproject.toml에저장된내용에기반해명시된의존성라이브러리설치
Poetry Add
필요한 패키지를 추가하고 싶은 경우 사용
poetry.lock
Writinglockfile에서생성되는파일
-> 이 파일이 존재하면 작성하고 있는 프로젝트 의존성과 동일한 의존성을 가질수 있음
-GithubRepository에 꼭 커밋!
poetry init
:poetry init
poetryshell
:shella ctivate
poetry install
:poetry에 지정된 모든 의존성 라이브러리 설치
poetry add
:poetry에 라이브러리추가
poetry remove
:poetry에서의존성 라이브러리 제거
공식문서:
https://python-poetry.org/
나의 파이썬 환경구축
https://dailyheumsi.tistory.com/244
파이썬 패키지 관리
https://blog.gyus.me/2020/introduce-poetry
uvicorn01_simple_webserver:app--reload
명령uvicorn:ASGI(Asynchronous Server Gateway Interface)
.비동기코드를 처리할수 있는Python웹서버,프레임워크간의 표준인터페이스(ASGI 표준을 준수하는 고성능 비동기 Python 웹 애플리케이션 서버)uvicorn.run
을 추가poetry add uvicorn
설치후 python301_simple_webserver.py
로 실행가능
localhost:8000/docs로 이동하면 Swagger문서를 확인할 수 있음
localhost:8000/redoc로이동하면 Redoc을 확인할 수 있음
Swagger는 단순히 문서 그 자체가 아니라 API를 문서화하고, 이해하기 쉽게 시각화하는 도구 및 표준화된 명세를 제공하는 개념
-> Swagger/OpenAPI는 기본적으로 자동 명세 생성을 지원하지만, 더 나은 문서화를 위해 필요하면 사람이 수동으로 수정하고 보완하는 것이 일반적인 활용 방식
웹에서 GET Method 를 사용해 데이터를 전송할 수 있다.
Path Parameter 방식 : /users/402
서버에402라는 값을 전달하고 변수로 사용
QueryParameter방식 : /users?id=402
QueryString->API뒤에 입력데이터를 함께 제공하는 방식으로 사용
QueryString은 Key,Value의 쌍으로 이루어지며 & 로 연결해 여러 데이터를 넘길 수 있음
Resource를 식별해야하는경우: PathParameter
정렬,필터링을 해야 하는경우:QueryParameter
QueryParameter를적용 (URL뒤에 ?를붙이고 Key,Value형태로 연결)
'Query Parameter'는 API에 추가적인 정보를 제공하기 위해 사용되며, URL 뒤에 '?'를 사용하여 데이터를 전달합니다.
특정파라미터는 Optional(선택적)으로 하고 싶은 경우
-클라이언트에서 API에 데이터를 보낼때,RequestBody(=Payload)를사용함('Request Body'는 클라이언트가 서버로 복잡한 데이터 구조를 전송할 때 사용되며, 주로 POST 요청에서 볼 수 있습니다.)
RequestBody: 클라이언트=>API
ResponseBody: API의Response=>클라이언트
RequestBody에 데이터를 보내고 싶다면 POSTMethod를 사용
Body의 데이터를 설명하는 Content-Type이란 Header필드가 존재하고,어떤데이터 타입인지 명시해야함
컨텐츠 타입
python305_request_body.py
를 실행해 웹서버 실행
API의Response => 클라이언트 : Response Body
Decorator의 response_model인자로 주입가능
역할
Form(입력)형태로 데이터를 받고 싶은 경우
Form클래스를 사용하면 Request의 FormData에서 값을 가져옴
웹사이트에 접근: GET요청
사용자가 데이터를 제출하는행위: POST요청
프론트엔드를 사용하기 위해 간단히 리팩토링
JinjaTemplate에선{{} }표현을 사용해 데이터를 사용할 수 있음
FORM(...)에서 ...은 Required(필수 요소)를 의미.
파일을 업로드 하고 싶은 경우
-> UploadFile