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+ verwendenMöglicherweise müssen Siepip
undpython
verwenden, wenn Sie mitpip3
undpython3
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 diemain.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 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.
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 }
Der erste Parameter...
ist der Standardwert, der bereitgestellt wird, wenn der Benutzer keinen Wert angibt. Bei der EinstellungNone
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 einfachPath
anstelle vonQuery
ein. Sie können die beiden auch
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
. In diesem Fall sehen Sie, dass dieuser_id
nur als eine ohneQuery
oder eine definiert ist Ganzzahl vonPath
; 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: str
async def update_user(*, user: User): pass
@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 APIAPIRouter
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'], )
verwenden – einfachapp / routers / v1 / user.py
importieren undAPIRouter
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
-Router, bearbeiten Sie einfachv1
zu:main.py
from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
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!