Рубрики
Без рубрики

Построить Simple API Сервис с Python Fastapi – Часть 1

Раньше я написал блог для создания службы API с Spring-Boot. В этой серии я … с меткой Fastapi, Python, API.

Раньше я написал блог для создания службы API с Spring-Boot.

В этой серии я прогуляю, как создать службу API (сервис API блога) в Fastapi с Python.

На сегодняшний день я расскажу о том, что Fastapi, SQLALCHEMY для работы с MySQL и Simple API для создания новой учетной записи пользователя.

Я. Что fastapi

Fastapi – это современный, быстрый (высокопроизводительный), веб-каркас для строительных API с Python 3.6+ на основе стандартных подсказки типа Python.

Основные функции:

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.get началось с «Hello {name}» с fastapi:

1.install fastapi:

Чтобы установить fastapi, просто используйте Pip Установить fastapi

pip install fastapi

Вам также понадобится Uvicorn для запуска сервера, поэтому установите UVicorn также

pip install uvicorn

Выше вы устанавливаете библиотеки в Python во всем мире. Но я бы предложил вам установить в вашу виртуальную среду.

Для меня я обычно работаю с Pipenv

Так что ниже, как установить библиотеку с Pipenv

pipenv install {library_name}

2.Мелемент API, который возвращает «Hello {name}»

Во-первых, просто создайте новый проект Python в своем любимом IDE, затем создайте файл 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

Для этого сначала вам нужен способ подключения к MySQL в Python.

Мы будем использовать SQLALCHEMY с библиотекой MySQL-разъема-Python.

1.sqlalchemy:

SQLALCHEMY – это инструментарий Python SQL Toolkit и Mapper Mapper Objects, который дает разработчикам приложений полную мощность и гибкость SQL.

Он обеспечивает полный набор из известных узоров нахождения на уровне предприятия, предназначенную для эффективных и высокопроизводительных доступ к базе данных, адаптированную к простому и пифитонной доменному языку.

Вы можете узнать больше информации для SQLalchemy отсюда

Чтобы установить SQLALCHEMY:

pipenv install sqlalchemy

2.mysql-разъем-python

MySQL-Connector-Python – это автономный драйвер Python для связи с серверами MySQL и как использовать его для разработки приложений базы данных.

Вы можете узнать больше с официальной страницы.

Чтобы установить MySQL-разъем-Python:

mysql-connector-python

3.Креата новая база данных со столом «user_info» в MySQL:

Создайте имя базы данных “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.Креате новый проект для создания сервиса с MySQL в Python

Новый проект будет состоит следующие файлы:

- 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()

Имя базы данных будет: restapi

Имя пользователя для базы данных: 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

Определите базовую схему и UserCreate, схема UserInfo для работы с API-запросом и ответом

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.interact с API с использованием почтальона:

Создание с именем пользователя уже существовало:

Создать новую учетную запись пользователя успешно

Вы можете оформить заказ Sourcecode для этого из Github Отказ

Счастливое кодирование ~~~

Оригинал: “https://dev.to/cuongld2/build-simple-api-service-with-python-fastapi-part-1-581o”