responder v2.0.0 est sorti le 2019-10-19 (JST)! Cela fait un moment, mais j'ai étudié les changements par rapport à la v1, je vais donc les présenter.
À propos, il semble que la rétrocompatibilité de la v1.3.2 soit sécurisée, il n'y a donc pas de problème même si vous mettez à niveau vers la v2.0.5.
Cette fois, nous reprendrons uniquement les modifications du système v1. ** Pour plus de détails, veuillez vous référer à Pour commencer avec Python responder ... Recherche préliminaire --Qiita! ** **
La notation du schéma et du modèle a changé! De plus, la refactorisation autour du routeur a été effectuée (honnêtement, cela ne concerne pas les utilisateurs).
Jusqu'à présent, une seule importation était nécessaire et l'avantage de pouvoir faire quoi que ce soit avec une seule instance était bon ou mauvais.
import responder
api = responder.API()
Cependant, ʻapi` était également nécessaire pour définir le schéma et le modèle, et la séparation des fichiers était un peu gênante. Dans la nouvelle version 2, ils ont été séparés, ce qui facilite un peu la séparation des fichiers.
Router La refactorisation a été effectuée. Je ne pense pas qu'il y ait eu de changements du côté des utilisateurs jusqu'à présent.
Schema
Une nouvelle importation de responder.ext.schema
(telle que de responder.ext.schema import Schema as OpenAPISchema
) est requise.
Cependant, cela dépend toujours de ʻapilors de la génération de l'instance de
responder.ext.schema.Schema`, et cette instance est requise lors de la définition de chaque schéma, il y a donc toujours une astuce pour séparer les fichiers ...
Nouvelle façon d'écrire
import responder
from responder.ext.schema import Schema as OpenAPISchema
from marshmallow import Schema, fields
contact = {
"name": "API Support",
"url": "http://www.example.com/support",
"email": "[email protected]",
}
license = {
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html",
}
api = responder.API()
schema = OpenAPISchema(
app=api,
title="Web Service",
version="1.0",
openapi="3.0.2",
docs_route='/docs', #Lors de la fourniture de documents
description="A simple pet store",
terms_of_service="http://example.com/terms/",
contact=contact,
license=license,
)
@schema.schema("Pet")
class PetSchema(Schema):
name = fields.Str()
@api.route("/")
def route(req, resp):
"""A cute furry animal endpoint.
---
get:
description: Get a random pet
responses:
200:
description: A pet to be returned
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
"""
resp.media = PetSchema().dump({"name": "little orange"})
De plus, cela semble également fonctionner avec la méthode d'écriture conventionnelle, mais ce n'est pas recommandé, donc la méthode d'écriture existante est omise.
Template En plus de la fonction de modèle existante, elle peut être implémentée comme suit:
Fonction de modèle nouvellement séparée
from responder.templates import Templates
templates = Templates()
@api.route("/hello/{name}/html")
def hello(req, resp, name):
resp.html = templates.render("hello.html", name=name)
Il prend également en charge le rendu asynchrone render_async
:
Rendu asynchrone des modèles
from responder.templates import Templates
templates = Templates(enable_async=True)
resp.html = await templates.render_async("hello.html", name=name)
Les modèles existants sont également disponibles:
Fonction de modèle existante
import responder
api = responder.API()
@api.route("/hello/{name}/html")
def hello_html(req, resp, *, who):
resp.html = api.template('hello.html', name=name)
À partir de la v2.0.5, il prend en charge Python 3.8.
Il peut être plus facile de mettre en œuvre des applications Web de taille moyenne.
Recommended Posts