Раньше я написал блог для создания службы 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”