Python FastAPI로 간단한 API 서비스 구축 — 1부
이전에 .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에서 이에 대한 소스 코드를 확인할 수 있습니다.
해피코딩~~~
Reference
이 문제에 관하여(Python FastAPI로 간단한 API 서비스 구축 — 1부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cuongld2/build-simple-api-service-with-python-fastapi-part-1-581o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)