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

Мигрирование супер простого приложения CRUD от Flask в Fastapi

Что такое FASTAPI и зачем мне это нужно? Flask была одним из самых популярных Python … с меткой Fastapi, Flask, Python, WebDev.

Что такое FASTAPI и зачем мне это нужно?

Flask была одной из самых популярных рамок Python в течение многих лет, но пришло время для обновления. Сегодня мы будем обсуждать более быстрый, более эффективный двоюродный брат Flask: FASTAPI. По сравнению с Flask, FastAPI является более эффективным и имеет встроенную документацию Swagger и другие вкусности. Если вы хотите запустить веб -приложение Python в производстве в 2021 году, вы захотите использовать FastAPI.

Хотя есть некоторые синтаксические различия между тем, как вы пишете колбу и тем, как вы пишете FastAPI, вы обнаружите, что они очень похожи. Сегодня мы собираемся перенести простое приложение CRUD с быстрого использования колбы. Так что следуйте!

Вот оригинальный код Flask:

from flask import Flask, request

app = Flask(__name__)

@app.route('/basic_api/entities/', methods=['GET', 'PUT', 'DELETE'])
def entity(entity_id):
    if request.method == "GET":
        return {
            'id': entity_id,
            'message': 'This endpoint should return the entity {} details'.format(entity_id),
            'method': request.method
        }
    if request.method == "PUT":
        return {
            'id': entity_id,
            'message': 'This endpoint should update the entity {}'.format(entity_id),
            'method': request.method,
            'body': request.json
        }
    if request.method == "DELETE":
        return {
            'id': entity_id,
            'message': 'This endpoint should delete the entity {}'.format(entity_id),
            'method': request.method
        }

Теперь мы собираемся разбить каждый кусочек этого кода Flask и показывать вам эквивалентный код в Fastapi. Во -первых, импорт библиотек и создание объекта приложения:

from flask import Flask, request

app = Flask(__name__)


from typing import Optional
from fastapi import FastAPI

app = FastAPI()

Далее, давайте переписаем /basic_api/entities/ Конечная точка в Fastapi.

@app.route('/basic_api/entities/', methods=['GET', 'PUT', 'DELETE'])
def entity(entity_id):
   if request.method == "GET":
       return {
           'id': entity_id,
           'message': 'This endpoint should return the entity {} details'.format(entity_id),
           'method': request.method
       }
   if request.method == "PUT":
       return {
           'id': entity_id,
           'message': 'This endpoint should update the entity {}'.format(entity_id),
           'method': request.method,
           'body': request.json
       }
   if request.method == "DELETE":
       return {
           'id': entity_id,
           'message': 'This endpoint should delete the entity {}'.format(entity_id),
           'method': request.method
       }

Обратите внимание, что в FastAPI методы запроса определяются как методы на объекте FastAPI, например, @app.get, @app.put, @app.post , и т. Д., а не как параметр. Также обратите внимание, что вместо того, чтобы указать тип параметра URL entity_id , в пределах маршрута, он вместо этого печатается как параметр в организация()

@app.get('/basic_api/entities/{entity_id}')
def entity(entity_id: int):
   return {
       'id': entity_id,
       'message': 'This endpoint should return the entity {} details'.format(entity_id),
   }


@app.put('/basic_api/entities/{entity_id}')
def entity(entity_id: int, body: Entity):
   return {
       'id': entity_id,
       'message': 'This endpoint should update the entity {}'.format(entity_id),
       'body name': body.name
   }


@app.delete('/basic_api/entities/{entity_id}')
def entity(entity_id: int):
   return {
       'id': entity_id,
       'message': 'This endpoint should delete the entity {}'.format(entity_id),
   }

Также обратите внимание, что в маршруте запроса POT мы проходим, как тело , а Сущность объект. Чтобы определить этот объект, мы создаем новый класс, который наследует от BaseModel Анкет

Все вместе, приложение Fastapi выглядит как:

from pydantic import BaseModel


class Entity(BaseModel):
   name: str
   description: Optional[str] = None


from pydantic import BaseModel
from typing import Optional
from fastapi import FastAPI

app = FastAPI()


class Entity(BaseModel):
   name: str
   description: Optional[str] = None

@app.get('/basic_api/entities/{entity_id}')
def entity(entity_id: int):
   return {
       'id': entity_id,
       'message': 'This endpoint should return the entity {} details'.format(entity_id),
   }


@app.put('/basic_api/entities/{entity_id}')
def entity(entity_id: int, body: Entity):
   return {
       'id': entity_id,
       'message': 'This endpoint should update the entity {}'.format(entity_id),
       'body name': body.name
   }


@app.delete('/basic_api/entities/{entity_id}')
def entity(entity_id: int):
   return {
       'id': entity_id,
       'message': 'This endpoint should delete the entity {}'.format(entity_id),
   }

Вот и все! Вы можете сохранить main.py файл и запустите сервер с помощью

uvicorn main:app --reload

Это приведет сервер на http://localhost: 8000

Одна из хороших особенностей Fastapi заключается в том, что он поставляется с уже интегрированным Swagger. Вы можете получить доступ к нему в http://localhost: 8000/docs

Оттуда вы можете проверить каждую из ваших конечных точек, чтобы увидеть, что они работают!

Оригинал: “https://dev.to/e_farach/migrating-a-super-simple-crud-app-from-flask-to-fastapi-5ba7”