# デコレーター

スキーマにコンテンツを追加するための主なメカニズムは、エンドポイントを装飾することです。もしあなたが過去に sanic-openapi を使ったことがあるなら、これは馴染みのあるものでしょう。デコレータとその引数は OAS v3.0 仕様 (opens new window) とほぼ同じです。

表示されるすべての例は、ルート定義の周りにラップされます。これらを作成する際には、Sanic ルート・デコレーター (@app.route@app.get など) が一番外側のデコレーターであることを確認する必要があります。つまり、最初にそれを置き、その後に以下のデコレータを1つ以上置く必要があります。

from sanic_ext import openapi
@app.get("/path/to/<something>")
@openapi.summary("This is a summary")
@openapi.description("This is a description")
async def handler(request, somethind: str):
    ...

また、以下の例の多くはモデルオブジェクトを参照していることがわかります。シンプルにするために、例では UserProfile を使用し、以下のようになります。重要なのは、型付けされたクラスであれば何でも良いということです。dataclassや他の種類のモデルオブジェクトであることは容易に想像がつくでしょう。

class UserProfile:
    name: str
    age: int
    email: str

# デコレーターの定義

# @opanepi.definition

@openapi.definitionデコレーターを使用すると、パス上の操作のすべての部分を一度に定義することができます。これは、他のデコレーターと同じように操作の定義を作成できるオムニバムデコレーターです。複数のフィールド固有のデコレータを使うか、あるいは単一のデコレータを使うかは、 開発者のスタイルによります。

このフィールドは、操作の定義を容易にするために、意図的に複数のタイプを受け入れる寛容なものとなっています。

Arguments

フィールド タイプ
body dict, RequestBody, ユーザー定義モデル
deprecated bool
description str
document str, ExternalDocumentation
exclude bool
operation str
parameter dict, Parameter, ユーザー定義モデル, [dict], [Parameter], [ユーザー定義モデル]
response dict, Response, ユーザー定義モデル, [dict], [Response], [ユーザー定義モデル]
summary str
tag str, Tag, [str], [Tag]

Examples

@openapi.definition(
    body=RequestBody(UserProfile, required=True),
    summary="User profile update",
    tag="one",
    response=[Success, Response(Failure, status=400)],
)

その他の例については、以下の例を参照してください。以下のデコレータの値は、対応するキーワード引数で使用することができます。

# フィールド固有デコレーター

以下のすべてのデコレーターは @openapi をベースにしています。

    MIT Licensed
    Copyright © 2018-present Sanic Community Organization

    ~ Made with ❤️ and ☕️ ~