Python FastAPI로 간단한 API 서비스 구축 — 1부

20989 단어 fastapipythonapi


이전에 .NET으로 API 서비스를 구축하는 방법에 대한 블로그를 작성했습니다.

이 시리즈에서는 Python을 사용하여 FastAPI에서 API 서비스(블로그 API 서비스)를 빌드하는 방법에 대해 설명합니다.

오늘 파트에서는 ​​FastAPI가 무엇인지, MySQL과 작업하기 위한 SQLAlchemy, 새 사용자 계정을 생성하는 간단한 API에 대해 설명합니다.

I.FastAPI란?

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

주요 기능은 다음과 같습니다.

Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.
Fast to code: Increase the speed to develop features by about 200% to 300% *.
Fewer bugs: Reduce about 40% of human (developer) induced errors. *
Intuitive: Great editor support. Completion everywhere. Less time debugging.
Easy: Designed to be easy to use and learn. Less time reading docs.
Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
Robust: Get production-ready code. With automatic interactive documentation.
Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.

공식 문서 페이지에서 자세한 정보를 확인할 수 있습니다.

II.FastAPI로 "Hello {name}"시작하기:

1.FastApi 설치:

FastAPI를 설치하려면 간단히 pip install fastapi를 사용하십시오.

pip install fastapi


서버를 실행하려면 uvicorn도 필요하므로 uvicorn도 설치하십시오.

pip install uvicorn


위는 파이썬에서 라이브러리를 전역적으로 설치하는 방법입니다. 그러나 가상 환경에 설치하는 것이 좋습니다.

나를 위해 나는 보통 pipenv로 작업합니다.

아래는 pipenv로 라이브러리를 설치하는 방법입니다.

pipenv install {library_name}


2. "Hello {name}"을 반환하는 API 구현

먼저 선호하는 IDE에서 새 Python 프로젝트를 생성한 다음 아래와 같이 main.py 파일을 생성합니다.

from fastapi import FastAPI

app = FastAPI()


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


이를 실행하려면 다음을 수행하십시오.


uvicorn main:map


브라우저에서 URL을 열면 결과는 다음과 같습니다.


III. 간단한 API를 구축하여 MySQL db에 새 사용자 계정 생성

이를 위해서는 먼저 Python에서 MySQL에 연결할 수 있는 방법이 필요합니다.

우리는 mysql-connector-python 라이브러리와 함께 SQLAlchemy를 사용할 것입니다.

1. SQL연금술:

SQLAlchemy는 응용 프로그램 개발자에게 SQL의 모든 기능과 유연성을 제공하는 Python SQL 툴킷 및 개체 관계형 매퍼입니다.

이는 단순하고 Pythonic 도메인 언어로 조정된 효율적이고 고성능 데이터베이스 액세스를 위해 설계된 잘 알려진 엔터프라이즈 수준 지속성 패턴의 전체 제품군을 제공합니다.

여기에서 SQLAlchemy에 대한 자세한 정보를 찾을 수 있습니다.

SQLAlchemy를 설치하려면:


pipenv install sqlalchemy


2.Mysql-커넥터-파이썬

MySQL-connector-python은 MySQL 서버와 통신하기 위한 독립형 Python 드라이버이며 이를 사용하여 데이터베이스 애플리케이션을 개발하는 방법입니다.

자세한 내용은 공식 페이지에서 확인할 수 있습니다.

mysql-connector-python을 설치하려면:

mysql-connector-python


3. MySQL에서 "user_info"테이블을 사용하여 새 데이터베이스를 생성합니다.

데이터베이스 이름 "restapi"를 만듭니다.

CREATE DATABASE restapi;
USE restapi;


새 테이블 이름 "user_info"를 만듭니다.

CREATE TABLE user_info(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(500) NOT NULL,
fullname VARCHAR(50) NOT NULL
);


4. Python에서 MySQL로 서비스를 빌드하기 위한 새 프로젝트 생성

새 프로젝트는 다음 파일로 구성됩니다.

- crud.py : to define method (read,write) to MySQL
- database.py : for connecting MySQL
- main.py: main file for build FastAPI service
- models.py: define class object models for FastAPI
- schemas.py: define schemas for working with the specific API request/response

데이터베이스.py:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "mysql+mysqlconnector://root:cuong1990@localhost:3306/restapi"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()


데이터베이스 이름은 다음과 같습니다.

데이터베이스의 사용자 이름: root

데이터베이스 비밀번호 : cuong1990

models.py

from sqlalchemy import Column, Integer, String
from sql_app.database import Base


class UserInfo(Base):
    __tablename__ = "user_info"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True)
    password = Column(String)
    fullname = Column(String, unique=True)


userinfo가 "user_info"테이블과 상호 작용하도록 클래스/개체 모델을 정의합니다.

schemas.py

from typing import List
from pydantic import BaseModel


class UserInfoBase(BaseModel):
    username: str
    fullname: str


class UserCreate(UserInfoBase):
    password: str


class UserInfo(UserInfoBase):
    id: int

    class Config:
        orm_mode = True


API 요청 및 응답 작업을 위한 기본 스키마 및 usercreate, userinfo 스키마 정의

crud.py


from sqlalchemy.orm import Session

from . import models, schemas


def get_user_by_username(db: Session, username: str):
    return db.query(models.UserInfo).filter(models.UserInfo.username == username).first()


def create_user(db: Session, user: schemas.UserCreate):
    fake_hashed_password = user.password + "notreallyhashed"
    db_user = models.UserInfo(username=user.username, password=fake_hashed_password, fullname=user.fullname)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user


새 사용자 생성 방법 정의 및 사용자 이름으로 사용자 가져오기

main.py

from typing import List

import uvicorn
from sqlalchemy.orm import Session
from fastapi import Depends, FastAPI, HTTPException

from sql_app import models, schemas, crud
from sql_app.database import engine, SessionLocal

models.Base.metadata.create_all(bind=engine)

app = FastAPI()

# Dependency


def get_db():
    db = None
    try:
        db = SessionLocal()
        yield db
    finally:
        db.close()


@app.post("/user", response_model=schemas.UserInfo)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
    db_user = crud.get_user_by_username(db, username=user.username)
    if db_user:
        raise HTTPException(status_code=400, detail="Username already registered")
    return crud.create_user(db=db, user=user)


if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8081)


api create_user를 빌드하는 방법을 정의하고 이미 사용자 이름으로 새 사용자 이름을 생성하는 경우 예외를 발생시킵니다.

fastapi로 서비스를 실행하려면 녹색 버튼을 클릭하여 쉽게 메인 파일을 실행할 수 있습니다.


그러면 서비스가 실행되는 것을 볼 수 있습니다.


5. 우편 배달부를 사용하여 api와 상호 작용:

이미 존재하는 사용자 이름으로 생성:


새 사용자 계정을 성공적으로 생성


github에서 이에 대한 소스 코드를 확인할 수 있습니다.

해피코딩~~~

좋은 웹페이지 즐겨찾기