Responder v2.0.0 wurde am 19.10.2019 (JST) veröffentlicht! Es ist schon eine Weile her, aber ich habe die Änderungen von Version 1 untersucht, also werde ich sie vorstellen.
Übrigens scheint die Abwärtskompatibilität von Version 1.3.2 gesichert zu sein, sodass es kein Problem gibt, selbst wenn Sie auf Version 2.0.5 aktualisieren.
Dieses Mal werden wir nur die Änderungen aus dem v1-System übernehmen. ** Weitere Informationen finden Sie unter Erste Schritte mit Python Responder ... Voruntersuchungen --Qiita! ** ** **
Die Notation von Schema und Vorlage hat sich geändert! Außerdem wurde ein Refactoring rund um den Router durchgeführt (ehrlich gesagt für Benutzer nicht relevant).
Bisher war nur ein Import erforderlich, und der Vorteil, mit einer Instanz etwas tun zu können, war gut oder schlecht.
import responder
api = responder.API()
"API" war jedoch auch erforderlich, um Schema und Vorlage zu definieren, und die Dateitrennung war ein wenig mühsam. In der neuen Version 2 wurden diese getrennt, was die Dateitrennung etwas erleichtert.
Router Refactoring wurde durchgeführt. Ich glaube, es gibt bisher keine Änderungen auf der Benutzerseite.
Schema
Ein neuer Import von responder.ext.schema
(z. B. from responder.ext.schema import Schema als OpenAPISchema
) ist erforderlich.
Dies hängt jedoch immer noch von api
ab, wenn die responder.ext.schema.Schema
-Instanz generiert wird, und diese Instanz wird beim Definieren jedes Schemas benötigt, sodass die Dateisolierung immer noch schwierig ist ...
Neue Schreibweise
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', #Bei der Bereitstellung von Dokumenten
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"})
Darüber hinaus scheint dies auch mit der herkömmlichen Schreibmethode zu funktionieren, wird jedoch nicht empfohlen, sodass die vorhandene Schreibmethode weggelassen wird.
Template Zusätzlich zur vorhandenen Vorlagenfunktion kann diese wie folgt implementiert werden:
Neu getrennte Vorlagenfunktion
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)
Es unterstützt auch das asynchrone Rendern von "render_async":
Asynchrones Rendern von Vorlagen
from responder.templates import Templates
templates = Templates(enable_async=True)
resp.html = await templates.render_async("hello.html", name=name)
Bestehende Muster sind ebenfalls verfügbar:
Vorhandene Vorlagenfunktion
import responder
api = responder.API()
@api.route("/hello/{name}/html")
def hello_html(req, resp, *, who):
resp.html = api.template('hello.html', name=name)
Ab Version 2.0.5 unterstützt es Python 3.8.
Es ist möglicherweise einfacher, mittelgroße Webanwendungen zu implementieren.
Recommended Posts