Heim  >  Artikel  >  Backend-Entwicklung  >  Schnelle Nutzung der REST-API durch Python

Schnelle Nutzung der REST-API durch Python

Guanhui
Guanhuinach vorne
2020-06-15 18:15:245099Durchsuche

Schnelle Nutzung der REST-API durch Python

Ich habe kürzlich eine neue Python -Sprach -API untersucht.

Fastapi ist ein Python-basiertes Framework, das die Verwendung von Pydantic und OpenAPI (ehemals Swagger) für die Dokumentation, Docker für schnelle Entwicklung und Bereitstellung sowie einfache Tests basierend auf dem Starlette-Framework fördert.

Es bietet viele Vorteile wie die automatische OpenAPI-Validierung und -Dokumentation, ohne dass unnötiger Aufwand entsteht. Ich denke, es gibt ein gutes Gleichgewicht zwischen der Bereitstellung keiner integrierten Funktionalität und der Bereitstellung zu vieler integrierter Funktionen.

Erste Schritte

Installieren Sie den Fastapi- und ASGI-Server (z. B. uvicorn):

Stellen Sie sicher, dass Sie Python 3.6.7+ verwenden Möglicherweise müssen Sie pip und python verwenden, wenn Sie mit pip3 und python3 eine Python-2-Version erhalten. Schauen Sie sich auch meinen Artikel über den Einstieg in Python an.

pip install fastapi uvicorn

und fügen Sie das alte „Hallo Welt“ in die main.py-Datei ein:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"Hello": "World"}

Entwicklung ausführen

und dann für die Entwicklung ausführen, das können Sie Führen Sie uvicorn main:app --reload

aus. Das ist alles, was ein einfacher Server tut! Jetzt können Sie //localhost:8000/ überprüfen, um die „Homepage“ anzuzeigen. Und wie Sie sehen, funktioniert die JSON-Antwort „einfach“! Sie können Swagger UI auch kostenlos unter //localhost:8000/docs herunterladen.

Validierung

Wie bereits erwähnt, ist es einfach, die Daten zu validieren (und eine Swagger-Dokumentation für die akzeptierten Datenformate zu erstellen). Fügen Sie einfach den Query-Import aus Fastapi hinzu und erzwingen Sie damit die Validierung:

from fastapi import FastAPI, Query

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0)
):
  return { 'user_id': user_id }

Der erste Parameter ... ist der Standardwert, der bereitgestellt wird, wenn der Benutzer keinen Wert angibt. Bei der Einstellung None gibt es keinen Standardwert und der Parameter ist optional. Um keinen Standardwert zu haben und der Parameter obligatorisch zu sein, verwenden Sie stattdessen Ellipsis oder ....

Wenn Sie diesen Code ausführen, wird das Update automatisch auf der Swagger-Benutzeroberfläche angezeigt:

Die Swagger-Benutzeroberfläche ermöglicht Ihnen die Anzeige der neuen /user-Route und spezifisch verwenden Stellen Sie die Anfrage mit einer Benutzer-ID

Wenn Sie eine beliebige Benutzer-ID eingeben, werden Sie sehen, dass die Anfrage automatisch für Sie ausgeführt wird, zum Beispiel //localhost:8000/user?user_id=1. Auf der Seite können Sie nur die Echo-Benutzer-ID sehen!

Wenn Sie stattdessen den Pfadparameter verwenden möchten (also /user/1), geben Sie einfach Path anstelle von Query ein. Sie können die beiden auch

kombinieren Route posten

Wenn Sie eine POST-Route haben, dann definieren Sie einfach die Eingabe

@app.post('/user/update')
async def update_user(
    *,
    user_id: int,
    really_update: int = Query(...)
):
    pass

. In diesem Fall sehen Sie, dass die user_id nur als eine ohne Query oder eine definiert ist Ganzzahl von Path; dies bedeutet, dass es sich im POST-Anfragetext befindet, z. B. JSON-Daten, sollten Sie sich die

-Anfrage- und Antwortmodelle ansehen 🎜>

Sie können mithilfe von Pydantic-Modellen detaillierte Anfrage- und Antwortmodelle dokumentieren und deklarieren. Dies ermöglicht Ihnen nicht nur eine automatische OpenAPI-Dokumentation für alle Ihre Modelle, sondern validiert auch die Anfrage- und Antwortmodelle, um die Eingabe sicherzustellen . Alle POST-Daten sind korrekt und die zurückgegebenen Daten passen auch zum Modell

Deklarieren Sie das Modell einfach wie folgt:

from pydantic import BaseModel

class User(BaseModel):
    id:: int
    name: str
    email: str
Wenn Sie dann das Benutzermodell als Eingabe möchten, können Sie Folgendes tun Folgendes:

async def update_user(*, user: User):
    pass
Oder wenn Sie es als Ausgabe verwenden möchten:

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user

Routen und zerlegen Sie eine größere API

Sie können die API sein Mit

in Routen aufteilen. Ich habe dies zum Beispiel in meiner API APIRouterapp / routers / v1 / __ init __。py

from fastapi import APIRouter
from .user import router as user_router

router = APIRouter()

router.include_router(
    user_router,
    prefix='/user',
    tags=['users'],
)
gefunden, dann können Sie den obigen Benutzercode in

verwenden – einfach app / routers / v1 / user.py importieren und APIRouter verwenden Anstelle von @ router.get('/')< aaaa> wird automatisch zu @ app.get('/ user') weitergeleitet, da die Route relativ zum Präfix / user /

from fastapi import APIRouter

router = APIRouter()

@router.get('/')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user
ist. Verwenden Sie abschließend alle

-Router, bearbeiten Sie einfach v1 zu: main.py

from fastapi import FastAPI
from app.routers import v1

app = FastAPI()

app.include_router(
    v1.router,
    prefix="/api/v1"
)
Auf diese Weise können Sie Router nach Belieben verketten und so große Anwendungen aufteilen und über versionierte APIs verfügen

Dockerisieren und Bereitstellen

Eine davon Die Dinge, die die Autoren von Fastapi gemacht haben, sind überraschend einfach! Der Standardwert

ist 2 Zeilen!

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app

是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:

version: "3"
services:
  test-api:
    build: ..
    entrypoint: '/start-reload.sh'
    ports:
        - 8080:80
    volumes:
        - ./:/app

这会将当前目录挂载为app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!

结论

就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。

推荐教程:Python教程

Das obige ist der detaillierte Inhalt vonSchnelle Nutzung der REST-API durch Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen