Heim > Artikel > Backend-Entwicklung > 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.
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"}
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.
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
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
from pydantic import BaseModel class User(BaseModel): id:: int name: str email: strWenn Sie dann das Benutzermodell als Eingabe möchten, können Sie Folgendes tun Folgendes:
async def update_user(*, user: User): passOder 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
in Routen aufteilen. Ich habe dies zum Beispiel in meiner API APIRouter
app / 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_userist. 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
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!