AI_Tech부스트캠프 week15...[4] FastAPI(1)

Leejaegun·2024년 12월 16일
0

AI_tech_CV트랙 여정

목록 보기
53/74

1.Getting Started

fastapi github: https://github.com/fastapi/fastapi

1.1 FastAPI 소개&특징

간단한 프로젝트구조

  • 프로젝트의 코드가 들어갈 모듈 설정(app).대안:프로젝트이름,src등
    main.py는간단하게 애플리케이션을 실행할 수 있는 entrypoint역할(참고공식문서)

entrypoint:프로그래밍 언어에서 최상위코드가 실행되는 시작점 또는 프로그램 진입점

  • main.py(또는app.py):FastAPI의 애플리케이션과 Router설정
  • model.py: MLmodel에 대한 클래스와 함수정의

1.2 Poetry

pip 를 대체하는 패키지 매니저.

  • DependencyResolver로 복잡한 의존성들의 버전충돌을 방지
  • Virtualenv를 생성해서 격리된환경에서 빠르게 개발이 가능해짐
  • 기존 파이썬 패키지관리도구에서 지원하지 않는 Build,Publish가가능
  • pyproject.toml을 기준으로 여러툴들의 config를 명시적으로관리
  • 새로만든프로젝트라면poetry를사용해보고,virtualenv등과비교하는것을추천

설치방법:https://python-poetry.org/docs/#installing-with-pipx

Poetry사용흐름

  • 프로젝트init

대화 형식으로 패키지 설치 가능,
-Dependency(프로덕션용),DevelopmentDependency(Dev용)
-> 개발 환경마다 필요한 패키지 분리.

pyproject.toml에 설정 저장

  • Poetry Shell활성화
    가상환경 진입.

  • Poetry Install
    pyproject.toml에저장된내용에기반해명시된의존성라이브러리설치

  • Poetry Add
    필요한 패키지를 추가하고 싶은 경우 사용

  • poetry.lock
    Writinglockfile에서생성되는파일
    -> 이 파일이 존재하면 작성하고 있는 프로젝트 의존성과 동일한 의존성을 가질수 있음
    -GithubRepository에 꼭 커밋!

Poetry-정리

poetry init:poetry init
poetryshell:shella ctivate
poetry install:poetry에 지정된 모든 의존성 라이브러리 설치
poetry add:poetry에 라이브러리추가
poetry remove:poetry에서의존성 라이브러리 제거

Poetry 추가 공부내용

공식문서:
https://python-poetry.org/

나의 파이썬 환경구축
https://dailyheumsi.tistory.com/244

파이썬 패키지 관리
https://blog.gyus.me/2020/introduce-poetry

1.3 FastAPI-HelloWorld

HTTP Method

아주 기초적인 웹서버

  • 터미널(혹은CLI)에서 uvicorn01_simple_webserver:app--reload명령
  • uvicorn:ASGI(Asynchronous Server Gateway Interface).비동기코드를 처리할수 있는Python웹서버,프레임워크간의 표준인터페이스(ASGI 표준을 준수하는 고성능 비동기 Python 웹 애플리케이션 서버)
  • 터미널에서 uvicorn을 작성하기 싫다면 코드 내 uvicorn.run을 추가

poetry add uvicorn설치후 python301_simple_webserver.py로 실행가능

localhost:8000/docs로 이동하면 Swagger문서를 확인할 수 있음

localhost:8000/redoc로이동하면 Redoc을 확인할 수 있음

1.4 Swagger

Swagger는 단순히 문서 그 자체가 아니라 API를 문서화하고, 이해하기 쉽게 시각화하는 도구 및 표준화된 명세를 제공하는 개념
-> Swagger/OpenAPI는 기본적으로 자동 명세 생성을 지원하지만, 더 나은 문서화를 위해 필요하면 사람이 수동으로 수정하고 보완하는 것이 일반적인 활용 방식

Swagger 기능

  • API디자인
  • API빌드
  • API문서화
  • API테스팅

2.FastAPI 기본사용법

2.1 URL Parameters

웹에서 GET Method 를 사용해 데이터를 전송할 수 있다.

  • Path Parameter 방식 : /users/402
    서버에402라는 값을 전달하고 변수로 사용

  • QueryParameter방식 : /users?id=402
    QueryString->API뒤에 입력데이터를 함께 제공하는 방식으로 사용
    QueryString은 Key,Value의 쌍으로 이루어지며 & 로 연결해 여러 데이터를 넘길 수 있음

  • Resource를 식별해야하는경우: PathParameter

  • 정렬,필터링을 해야 하는경우:QueryParameter

2.2 Path Parameter

  • GETMethod: 정보를 READ하기 위해 사용
  • 유저정보에 접근하는 API만들기
    'Path Parameter'는 URL 경로의 일부를 동적으로 변경하여, API가 다양한 리소스를 식별하고 처리할 수 있도록 합니다.

2.3 Query Parameter


QueryParameter를적용 (URL뒤에 ?를붙이고 Key,Value형태로 연결)
'Query Parameter'는 API에 추가적인 정보를 제공하기 위해 사용되며, URL 뒤에 '?'를 사용하여 데이터를 전달합니다.

2.4 Optional Parameter

특정파라미터는 Optional(선택적)으로 하고 싶은 경우

  • typing모듈의 Optional을 사용
  • Optional을 사용해 이 파라미터는Optional임을 명시(기본값은 None)

2.5 Request Body

-클라이언트에서 API에 데이터를 보낼때,RequestBody(=Payload)를사용함('Request Body'는 클라이언트가 서버로 복잡한 데이터 구조를 전송할 때 사용되며, 주로 POST 요청에서 볼 수 있습니다.)

RequestBody: 클라이언트=>API
ResponseBody: API의Response=>클라이언트

RequestBody에 데이터를 보내고 싶다면 POSTMethod를 사용
Body의 데이터를 설명하는 Content-Type이란 Header필드가 존재하고,어떤데이터 타입인지 명시해야함

컨텐츠 타입

  • application/json: Body가 JSON형태(FastAPI는기본적으로이걸사용)
  • application/x-www-form-urlencoded:BODY에Key,Value사용.&구분자사용
  • text/plain: 단순txt파일
  • multipart/form-data: 데이터를 바이너리 데이터로 전송


python305_request_body.py를 실행해 웹서버 실행

  • Schemas에서 pydantic으로 정의한 내용을 볼 수 있음

    기본설정상태에서 Execute

    curl명령어,Response가 보임

2.6 Response Body

API의Response => 클라이언트 : Response Body

Decorator의 response_model인자로 주입가능
역할

  • OutputData를 해당정의에 맞게 변형
  • 데이터 Validation
  • Response에 대한 JsonSchema 추가
  • 자동으로 문서화

2.7 Form

Form(입력)형태로 데이터를 받고 싶은 경우
Form클래스를 사용하면 Request의 FormData에서 값을 가져옴


웹사이트에 접근: GET요청
사용자가 데이터를 제출하는행위: POST요청
프론트엔드를 사용하기 위해 간단히 리팩토링

  • 파이썬에서사용할수있는템플릿엔진:JinjaTemplate=>프론트엔드구성
  • templates.TemplateResponse로 해당HTML로 데이터를보냄

JinjaTemplate에선{{} }표현을 사용해 데이터를 사용할 수 있음

FORM(...)에서 ...은 Required(필수 요소)를 의미.

2.8 File

파일을 업로드 하고 싶은 경우
-> UploadFile

  • UploadFileImport
  • “/”로접근할때 보여줄 HTML코드
  • HTML에서 action으로 넘김
  • 파일을Bytes로 표현하고,여러파일은 LIST에 설정
  • Bytes자료형:1과0으로구성되는binary 포맷으로저장.머신이읽을수있는형식
  • 다양한파일(텍스트,이미지,오디오)는 기본적으로 바이너리데이터로 구성됨
profile
Lee_AA

0개의 댓글

관련 채용 정보