FastAPI가 포함된 Python REST API, CRUD 애플리케이션

13829 단어 pythonrestfastapicrud
원래 게시됨my blog

소개



FastAPI는 표준 Python 유형 힌트를 기반으로 Python 3.6 이상으로 API를 구축하기 위한 최신의 빠른(고성능) 웹 프레임워크입니다.

다음 프로젝트에 FastApi를 사용해야 하는 이유는 무엇입니까?
  • 빠름: NodeJS 및 Go와 동등한 매우 높은 성능(Starlette 및 Pydantic 덕분에). One of the fastest Python frameworks available.
  • 빠른 코딩: 기능 개발 속도를 약 200%에서 300%까지 높입니다. *
  • 버그 감소: 인간(개발자)이 유발한 오류의 약 40%를 줄입니다. *
  • 직관적: 훌륭한 편집기 지원. 어디서나 완성. 디버깅 시간이 적습니다.
  • 간편함: 사용하고 배우기 쉽도록 설계되었습니다. 문서를 읽는 시간이 줄어듭니다.
  • Short: 코드 중복을 최소화합니다. 각 매개변수 선언의 여러 기능. 버그가 적습니다.
  • 강력함: 프로덕션 준비 코드를 가져옵니다. 자동 대화형 문서를 사용합니다.
  • 표준 기반: API에 대한 개방형 표준 기반(및 완전히 호환 가능): OpenAPI(이전에는 Swagger로 알려짐) 및 JSON 스키마.

  • 프로젝트 설정



    "fastapi-blog"라는 프로젝트를 보관할 새 폴더를 만드는 것으로 시작하십시오.

    mkdir fastapi-blog && cd fastapi-blog
    


    다음으로 가상 환경을 생성하고 활성화합니다(우리는 pipenv를 사용할 것입니다):

    pipenv 사용 방법 알아보기here

    종속성 설치

    pipenv install fastapi uvicorn
    



    ✔ Successfully created virtual environment!
    Virtualenv location: /Users/rosie/.local/share/virtualenvs/fastapi-blog-FXGAPIoM
    Creating a Pipfile for this project...
    Installing fastapi...
    Adding fastapi to Pipfile's [packages]...
    ✔ Installation Succeeded
    Installing uvicorn...
    Adding uvicorn to Pipfile's [packages]...
    ✔ Installation Succeeded
    Pipfile.lock not found, creating...
    Locking [dev-packages] dependencies...
    Locking [packages] dependencies...
    Building requirements...
    Resolving dependencies...
    ✔ Success!
    Updated Pipfile.lock (d74721)!
    Installing dependencies from Pipfile.lock (d74721)...
      🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
    To activate this project's virtualenv, run pipenv shell.
    Alternatively, run a command inside the virtualenv with pipenv run
    

    pipenv shell를 실행하여 환경을 활성화하십시오.

    새 파일을 만들고 app.py라고 부르면 이 파일에 모든 코드를 넣을 것입니다.

    touch app.py
    


    이 기사에서는 Python 목록을 데이터베이스로 사용할 것이며 실제 데이터베이스는 사용하지 않을 것입니다.

    app.py 파일 안에 다음을 넣으십시오.

    # app.py
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    def read_root():
      return {"home": "Home page"}
    
    


    터미널을 연 다음 서버를 실행하십시오.

    $ uvicorn app:app
    
    INFO:     Started server process [19004]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
    


    첫 번째 앱은 파일 이름이고 두 번째 앱은 애플리케이션 이름app = FirstAPI입니다.

    http://127.0.0.1:8000

    유비콘에 대해 자세히 알아보기here

    게시물을 저장할 가짜 데이터베이스를 만들어 보겠습니다.

    # app.py
    from fastapi import FastAPI
    from pydantic import BaseModel
    from typing import Optional, Text
    from datetime import datetime
    
    app = FastAPI()
    
    postdb = []
    
    # post model
    class Post(BaseModel):
        id: int
        title: str
        author: str
        content: Text
        created_at: datetime = datetime.now()
        published_at: datetime
        published: Optional[bool] = False
    
    @app.get("/")
    def read_root():
      return {"home": "Home page"}
    


    여기에서 Pydantic 및 Python types module 을 사용하여 유형 주석이 있는 간단한 Python 클래스를 만듭니다.

    우리가 저장하는 모든 블로그 게시물에 대해:

    - the title
    - the author
    - the content
    - the date we created it
    - the date we published it
    - and the status of the post
    

    equal symbol(=)를 사용하여 기본값을 추가합니다.

    이제 모든 게시물을 볼 수 있는 새 경로를 만듭니다.

    # app.py
    ...
    @app.get("/blog")
    def get_posts():
        return postdb
    


    서버를 다시 시작한 다음http://127.0.0.1:8000 열면 비어 있음list []이 표시됩니다.

    첫 번째 게시물을 추가해 보겠습니다.

    ...
    @app.post("/blog")
    def add_post(post: Post):
        postdb.append(post.dict())
        return postdb[-1]
    
    


    내가 FastAPI에 대해 정말 좋아하는 것 중 하나는 자동 생성된 문서입니다.

    http://localhost:8000/docs .

    첫 번째 게시물을 작성해 보겠습니다.Try it out를 클릭한 다음 다음을 입력합니다.

    {
      "id": 1,
      "title": "Getting started with Django",
      "author": "Ousseynou DIOP",
      "content": "Hello Django",
      "created_at": "2021-03-01T18:17:45.194020",
      "published_at": "2021-03-01T18:17:58.887Z",
      "published": true
    }
    


    더 많은 게시물을 작성한 다음 http://localhost:8000/blog으로 이동하십시오.

    ID로 하나의 게시물을 가져오자.

    # app.py
    ...
    @app.get("/blog/{post_id}")
    def get_post(post_id: int):
        post = post_id - 1
        return postdb[post]
    


    CRUD의 마지막 두 부분은 업데이트와 삭제입니다.

    게시물 업데이트부터 시작하겠습니다.

    # app.py
    ...
    @app.post("/blog/{post_id}")
    def update_post(post_id: int, post: Post):
        postdb[post_id] = post
        return {"message": "Post has been updated succesfully"}
    
    


    지금 추가하면 게시물을 쉽게 업데이트할 수 있습니다.

    게시물을 삭제하려면 이것을 추가해야 합니다.

    # app.py
    ...
    @app.delete("/blog/{post_id}")
    def delete_post(post_id: int):
        postdb.pop(post_id-1)
        return {"message": "Post has been deleted succesfully"}
    
    


    마무리



    이 기사에서는 간단한 CRUD 애플리케이션을 만들어 FastAPI의 기본 빌딩 블록을 배웠습니다.
    데이터베이스를 FastAPI와 통합하는 방법을 배우고 싶다면 알려주십시오.

    다음 튜토리얼에서 뵙겠습니다.

    좋은 웹페이지 즐겨찾기