Maison > Article > développement back-end > Utilisation rapide de l'API REST par Python
À la suggestion d'un collègue, nous avons décidé d'utiliser Fastapi comme framework.
Fastapi est un framework basé sur Python qui encourage l'utilisation de Pydantic et OpenAPI (anciennement Swagger) pour la documentation, Docker pour un développement et un déploiement rapides, ainsi que des tests simples basés sur le framework Starlette.
Il offre de nombreux avantages tels que la validation et la documentation automatiques d'OpenAPI sans ajouter de surcharge inutile. Je pense qu'il existe un bon équilibre entre ne fournir aucune fonctionnalité intégrée et fournir trop de fonctionnalités intégrées.
Installez fastapi et le serveur ASGI (par exemple uvicorn) :
Assurez-vous que vous utilisez Python 3.6.7+ Vous devrez peut-être utiliser pip
et python
si pip3
et python3
vous donnent une version python 2. Consultez également mon article sur la prise en main de Python.
pip install fastapi uvicorn
et ajoutez l'ancien "hello world" dans le fichier main.py
:
from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
puis exécuter pour le développement, vous pouvez Exécutez uvicorn main:app --reload
C'est tout ce qu'un simple serveur fait ! Vous pouvez maintenant vérifier //localhost:8000/ pour voir la "Page d'accueil". Et, comme vous pouvez le constater, la réponse JSON « fonctionne tout simplement » ! Vous pouvez également obtenir l'interface utilisateur Swagger gratuitement sur //localhost:8000/docs.
Comme mentionné précédemment, il est facile de valider les données (et de générer une documentation Swagger pour les formats de données acceptés). Ajoutez simplement l'import Query
depuis fastapi et utilisez-le pour forcer la validation :
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 }
Le premier paramètre ...
est la valeur par défaut qui est fournie si l'utilisateur ne fournit pas de valeur. S'il est défini sur None
, il n'y a pas de valeur par défaut et le paramètre est facultatif. Pour n'avoir aucune valeur par défaut et que le paramètre soit obligatoire, utilisez plutôt Ellipsis , ou ...
.
Si vous exécutez ce code, vous verrez automatiquement la mise à jour sur l'interface utilisateur swagger :
L'interface utilisateur Swagger vous permet d'afficher le nouvel itinéraire /user et utiliser spécifique Faire la demande avec un identifiant utilisateur
Si vous entrez un identifiant utilisateur, vous verrez qu'il effectuera automatiquement la demande pour vous, par exemple //localhost:8000/user?user_id=1. Dans la page, vous ne pouvez voir que l'ID utilisateur repris !
Si vous souhaitez utiliser le paramètre path à la place (pour qu'il soit /user/1
), entrez simplement et utilisez Path
au lieu de Query
. Vous pouvez également combiner les deux
Si vous avez une route POST
alors définissez simplement l'entrée
@app.post('/user/update') async def update_user( *, user_id: int, really_update: int = Query(...) ): pass
Dans ce cas vous pouvez voir que le user_id
n'est défini que comme un sans Query
ou un entier de Path
; cela signifie qu'il sera dans le corps de la requête POST. Si vous acceptez des structures de données plus complexes, telles que les données JSON, vous devriez examiner les modèles de requête et de réponse
from pydantic import BaseModel class User(BaseModel): id:: int name: str email: strEnsuite, si vous voulez le modèle utilisateur en entrée, vous pouvez le faire. ce qui suit :
async def update_user(*, user: User): passOu si vous souhaitez l'utiliser comme sortie :
@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
Par exemple, j'ai trouvé ceci dans mon 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'], )alors vous pouvez utiliser le code utilisateur ci-dessus dans
- importez simplement app / routers / v1 / user.py
et utilisez au lieu de APIRouter
. Il acheminera automatiquement vers @ router.get('/')< aaaa>
car l'itinéraire est relatif au préfixe @ app.get('/ 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
/ user /
Enfin, utilisez tous les routeur, modifiez simplement pour :
from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
v1
Vous pouvez chaîner les routeurs à volonté de cette façon, ce qui vous permet de diviser les grandes applications et de disposer d'API versionnées main.py
Dockerisation et déploiement
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教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!