[PYTHON] Comment utiliser FastAPI ③ OpenAPI

Ce qui est écrit

--Mémo lors de l'utilisation de FastAPI (Cela peut être faux car il s'agit d'un mémo personnel ...)

référence

FastAPI

environnement

Créez un environnement Docker et vérifiez le fonctionnement

Docker FastAPI

Commencez

bash


# main.Si py est dans le répertoire racine
$ uvicorn main:app --reload --host 0.0.0.0 --port 8000

# main.Si py n'est pas dans le répertoire racine
$ uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Source

main.py


import uvicorn
from fastapi import FastAPI, Query, Path, Body
from typing import Optional
from pydantic import BaseModel, Field

#Description de chaque balise
tags_metadata = [
    {
        "name": "users",
        "description": "Operations with users. The **login** logic is also here.",
    },
    {
        "name": "items",
        "description": "Manage items. So _fancy_ they have their own docs.",
        "externalDocs": {
            "description": "Items external docs",
            "url": "https://fastapi.tiangolo.com/",
        },
    },
]

items = {
    1: {"item_no": 1, "item_name": "name1", "price": 100},
    2: {"item_no": 2, "item_name": "name2", "price": 200},
    3: {"item_no": 3, "item_name": "name3", "price": 300},
}

users = {
    1: {"user_no": 1, "user_name": "name1", "email": "[email protected]"},
    2: {"user_no": 2, "user_name": "name2", "email": "[email protected]"},
    3: {"user_no": 3, "user_name": "name3", "email": "[email protected]"},
}

#Description du schéma, exemple de données
class Item(BaseModel):
    name: str
    description: Optional[str] = Field(
        None,
        title="The description of the item",
        max_length=300
    )
    price: float = Field(
        ...,
        gt=0,
        description="The price must be greater than zero"
    )
    tax: Optional[float] = None

    class Config:
        schema_extra = {
            "example": {
                "name": "example_name",
                "description": "example_description",
                "price": 100,
                "tax": 10,
            }
        }

#Paramètres OpenAPI lui-même
app = FastAPI(
    title="FastAPI Sample Project",
    description="This is a very fancy project, with auto docs for the API and everything",
    version="1.0.1",
    openapi_tags=tags_metadata,
    docs_url="/api/v1/docs",
    redoc_url="/api/v1/redoc",
    openapi_url="/api/v1/openapi.json",
)

#Paramétrage de chaque URL
@app.get(
    "/items",
    tags=["items"],
    summary="read items summary",
)
async def read_items(
    option: Optional[str] = Query(
        None,
        title="Query Parameter Title",
        description="Query Parameter Description",
    ),
):
    return {"items": items}

@app.get(
    "/items/{item_no}",
    tags=["items"],
    summary="read item summary",
)
async def read_item(
    item_no: str = Path(
        None,
        title="Path Parameter Title",
        description="Path Parameter Description",
        deprecated=True,
    ),
):
    return {"item": items[item_no]}

@app.post(
    "/items/{item_no}",
    tags=["items"],
    summary="create item summary",
)
async def create_item(
    item_id: int,
    item: Item = Body(..., embed=True),
):
    results = {"item_id": item_id, "item": item}
    return results

@app.get(
    "/users",
    tags=["users"],
)
async def read_users():
    """
    Create an item with all the information:

    - **name**: each item must have a name
    - **description**: a long description
    - **price**: required
    - **tax**: if the item doesn't have tax, you can omit this
    - **tags**: a set of unique tag strings for this item
    -Test de réflexion de document FastAPI
    """
    return {"users": users}

@app.get(
    "/user/{user_no}",
    tags=["users"],
)
async def read_user(user_no: str):
    return {"user": users[user_no]}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

Document généré

OpenAPI.png

Recommended Posts

Comment utiliser FastAPI ③ OpenAPI
Comment utiliser FastAPI ① Tutoriel - Guide de l'utilisateur
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser FastAPI ② Advanced - Guide de l'utilisateur
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser Qt Designer
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Aller] Comment utiliser "... (3 périodes)"
Comment faire fonctionner GeoIp2 de Django
[Python] Comment utiliser input ()
Comment utiliser le décorateur
[Introduction] Comment utiliser open3d
Comment utiliser Python lambda
Comment utiliser Jupyter Notebook
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser Google Colaboratory
Comment utiliser les octets Python