Schnelle Nutzung der REST-API durch Python

Guanhui
Freigeben: 2020-06-15 18:15:24
nach vorne
5015 Leute haben es durchsucht

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+ verwendenMöglicherweise müssen Siepipundpythonverwenden, wenn Sie mitpip3undpython3eine Python-2-Version erhalten. Schauen Sie sich auch meinen Artikel über den Einstieg in Python an.

pip install fastapi uvicorn
Nach dem Login kopieren

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

from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
Nach dem Login kopieren

Entwicklung ausführen

und dann für die Entwicklung ausführen, das können Sie Führen Sieuvicorn 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 denQuery-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 }
Nach dem Login kopieren

Der erste Parameter...ist der Standardwert, der bereitgestellt wird, wenn der Benutzer keinen Wert angibt. Bei der EinstellungNonegibt 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 einfachPathanstelle vonQueryein. Sie können die beiden auch

kombinieren Route posten

Wenn Sie einePOST-Route haben, dann definieren Sie einfach die Eingabe

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

. In diesem Fall sehen Sie, dass dieuser_idnur als eine ohneQueryoder eine definiert ist Ganzzahl vonPath; 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
Nach dem Login kopieren
Wenn Sie dann das Benutzermodell als Eingabe möchten, können Sie Folgendes tun Folgendes:

async def update_user(*, user: User): pass
Nach dem Login kopieren
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
Nach dem Login kopieren

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 APIAPIRouterapp / 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'], )
Nach dem Login kopieren
gefunden, dann können Sie den obigen Benutzercode in

verwenden – einfachapp / routers / v1 / user.pyimportieren undAPIRouterverwenden 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
Nach dem Login kopieren
ist. Verwenden Sie abschließend alle

-Router, bearbeiten Sie einfachv1zu:main.py

from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
Nach dem Login kopieren
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
Nach dem Login kopieren

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

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

这会将当前目录挂载为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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!