# 便利な物

# シリアライザーの修正

アプリケーションを開発していると、常に同じようなレスポンスを返すルートが存在することがよくあります。このような場合、エンドポイントで返されるシリアライザーをあらかじめ定義しておけば、あとはコンテンツを返すだけでよいのです。

from sanic_ext import serializer
@app.get("/<name>")
@serializer(text)
async def hello_world(request, name: str):
    if name.isnumeric():
        return "hello " * int(name)
    return f"Hello, {name}"

@serializer デコレータは、ステータスコードを追加することもできます。

from sanic_ext import serializer
@app.post("/")
@serializer(text, status=202)
async def create_something(request):
    ...

# カスタムシリアライザー

@serializer デコレータを使用すると、有効な型 (HTTPResonse) を返す限りにおいて、独自のカスタム関数を渡すことも可能です。

def message(retval, request, action, status):
    return json(
        {
            "request_id": str(request.id),
            "action": action,
            "message": retval,
        },
        status=status,
    )
@app.post("/<action>")
@serializer(message)
async def do_action(request, action: str):
    return "This is a message"

さて、文字列だけを返すと、素敵なシリアル化された出力が返されるはずです。

$ curl localhost:8000/eat_cookies -X POST
{
  "request_id": "ef81c45b-235c-46dd-9dbd-b550f8fa77f9",
  "action": "eat_cookies",
  "message": "This is a message"
}
MIT Licensed
Copyright © 2018-present Sanic Community Organization

~ Made with ❤️ and ☕️ ~