궁금한게 많은 개발자 노트

Fast API 본문

Back End

Fast API

궁금한게 많은 개발자 2022. 5. 23. 11:21

Fast API란?

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.

타입 힌트를 제공하는 현대적이고, 빠른(고성능) 웹 프레임워크이다.

 

python기반으로 flask와 같은 개발 편의성에 nodejs, go와 같은 성능과 안정성을 갖춘 web framework입니다.

starlette framework를 기반으로한 비동기 API 서버 지원

pydantic을 사용한 data validation지원

api swagger, redoc 등을 사용한 api document 자동 생성 지원

python3.6+ type hinting지원

 

Type hint 알고가기

def foo(a: int) -> int:
    b: int = 10
    return a*b

타입 힌트는 python 3.5 버전 이상에서 사용할 수 있으며, 코드 가독성 향상 및 사용자가 프로그래밍을 할 때 인자 및 변수에 대한 타입을 정의할 때 헷갈리지 않게 도와준다.

위처럼 변수에 타입 힌트를 정의할 수 있으며 언뜻 보면 타입스크립트와 비슷하다.

그러나, 파이썬은 정적 타입을 지향하는 것이 아니다.
타입 힌트는 언어 그대로 힌트를 제공하는 것이며 파이썬은 동적 타입을 지향하는 언어이다.

그래서 인자 a에 정수 값이 아닌 string, boolean 등의 타입이 들어와도 오류가 나지 않는다.

 

FastAPI 특징

  • 빠름 : NodeJS 및 Go 와 동등한 매우 높은 성능 (Starlette 및 Pydantic 덕분에). Python 프레임워크 중에서 가장 빠르다.
  • Fast to code : 기능 개발 속도를 약 200~300% 증가시킨다.
  • 버그 감소 : 인간(개발자)이 유발하는 오류의 약 40%를 줄인다.
  • 직관적 : 훌륭한 편집기를 지원하며 디버깅 시간이 적다.
  • Easy : 사용하고 배우기 쉽도록 설계되었다. 문서를 읽는 시간이 줄일 수 있다.
  • Short : 코드 중복을 최소화한다.
  • 표준 기반 : API에 대한 개방형 표준인 OpenAPI (이전에는 Swagger로 알려짐) 및 JSON Schema 를 기반으로 하고 완전히 호환된다.

이러한 이유로 FastAPI는 출시된 지 얼마 지나지 않았음에도 불구하고 개발자들 사이에서 빠르게 성장하고 있다.

추가로, Fast API를 작성하면 자동으로 대화형 API docs를 제공한다 (주요 기능) 아래 링크 참고

https://fastapi.tiangolo.com/

 

FastAPI

FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https://github.com/tiangolo/fastapi FastAPI is a modern, fast (high-performance), web framework for buil

fastapi.tiangolo.com

 

 

[ installation ]

pip를사용하여 fastapi와 웹서버로 사요될 uvicorn도 함께 설치합니다.

uvicorn은 uvloop와 httptools를 기반으로 구축된 ASGI서버입니다.

pip install fastapi uvicorn

 

[ first step ]

from fastapi import FastAPI             # import FastAPI

app = FastAPI()                         # create a FastAPI instance

@app.get('/')                           # create a path operation
async def root():                       # define the path operation function
    return {'message': 'Hello World'}   # return the content

작성된 코드를 서버로 실행하는 방법으로는 "uvicorn main:app --reload"입니다.

http://localhost:8000으로 접속 시 json형태의 response가 수신됨을 확인할 수 있습니다.

또한, http://localhost:8000/docs또는 /redoc으로 접속 시 자동 생성된 API docs를 확인할 수 있습니다.

http://localhost:8000/openapi.json으로 접속하면 OpenAPI standard에 따른 API 정의 명세를 확인할 수 있습니다.

 

 

 

FastAPI는 API에 대한 모든 기능을 제공하는 파이썬 클래스입니다.

Starlette를 직접 상속하는 클래스로, Starlette의 모든 기능을 사용할 수 있습니다.

(Starlette : python용 경량 ASGI framework 자세한 설명은 아래 링크 참고)

https://ko.quish.tv/starlette-lightweight-asgi-framework-toolkit

 

STARLETTE: PYTHON용 경량 ASGI 프레임워크/툴킷 - 블로그

개발자가 버그 및 문제에 대한 주제를 토론하고 지식을 작성 및 공유하며 전 세계 수백만 개발자와 연결할 수 있는 소셜 네트워크입니다.

ko.quish.tv

 

 

 

[ FastAPI 사용법 ]

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

app변수는 FastAPI의 인스턴스가 됩니다. 모든 API를 생성하기 위한 상호작용의 주요 지점이 됩니다.

 

경로

다음은 경로 동작 생성입니다. 경로는 "/"에서 시작하는 URL의 마지막 부분을 나타냅니다.

https://example.com/items/foo 에서 items/foo가 경로가 됩니다.

경로는 일반적으로 endpoint또는 route라고 불립니다.

 

API를 빌드하는 동안 경로는 관심사와 리소스를 분리하는 주요 방법입니다.

 

 

동작

operation은 http 메소드 중 하나를 나타냅니다. POST, GET, PUT, DELETE, HEAD, TRACE 등등

HTTP 프로토콜에서는 이러한 메소드를 하나 이상 사용하여 각 경로와 통신할 수 있습니다.

API를 빌드하는 동안 일반적으로 특정 행동을 수행하기 위해 특정 HTTP 메소드를 사용합니다.

@app.get("/")은 FastAPI에게 바로 아래에 있는 함수가 다음으로 이동하는 요청을 처리한다는 것을 알려줍니다.

이 데코레이터는 FastAPI에게 아래 함수가 경로 /에 해당하는 get 동작하라고 알려줍니다.
이것이 "경로 동작 데코레이터"입니다.

 

 

경로 동작 함수

데코레이터 아래에 있는 함수로 해당 경로에 대한 동작 요청 받을 때 마다 FastAPI에 의해 호출 되는 함수입니다.

 

 

https://fastapi.tiangolo.com/ko/tutorial/

 

자습서 - 사용자 안내서 - 도입부 - FastAPI

자습서 - 사용자 안내서 - 도입부 이 자습서는 FastAPI의 대부분의 기능을 단계별로 사용하는 방법을 보여줍니다. 각 섹션은 이전 섹션을 기반해서 점진적으로 만들어 졌지만, 주제에 따라 다르게

fastapi.tiangolo.com

 

 

[ Depends ]

 

 

 

 

'Back End' 카테고리의 다른 글

[ Python ] pydantic  (0) 2022.05.24
[ Python ] 병렬 처리 concurrent future  (4) 2022.05.23
django model 간 관계  (0) 2022.05.19
django 핵심 기능 - Model  (0) 2022.05.19
django 개발의 기본 사항  (0) 2022.05.19
Comments