概要
Goには、OpenAPIで定義したyamlをコード出力するツールがあります。概要についてはOpenAPI GeneratorでGoのAPIサーバー/クライアントコードを自動生成するの記事で、解説されています。
出力するコードにはmodelのstructも含まれるのですが、例えばGinでバリデーションを使ってみるで紹介されているような、Custom Struct Tag(ginだとbinding
)を、出力したいという場合もあると思います。
今回は、OpenAPIでCustom Struct Tagを出力したい場合どうするかというのをメモ書きします。
対応方法
goswaggerのCustom extensionsのドキュメントにある通り、yamlにx-go-custom-tag
で、Custom Struct Tagを設定すれば出力してくれます。
設定サンプル
以下がyamlファイルに設定する、リクエストのmodelのサンプルです。
SampleRequest:
title: SampleRequest
type: object
properties:
name:
type: string
x-go-custom-tag: binding:"required"
email:
type: string
x-go-custom-tag: binding:"required,email"
required:
- name
- email
以下のように、コードでbindingのStruct Tagが出力されます。
type SampleRequest struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
}