リクエストモデルとレスポンスモデルを定義したいと思います。私はAWSでサーバーレスフレームワークを使用していますが、表示されているものはすべて serverless-aws-documentation の使用を推奨しています
READMEは、この行をcustom.documentation.models.MODELNAME
に含める必要があることを示しています
schema: ${file(models/error.json)}
ただし、ベースラインとして使用するmodels/error.json
のサンプルファイルはありません。
実際の例では serverless.yml 次のような定義があります。
-
name: DoSomethingRequest
contentType: "application/json"
schema:
type: array
items:
type: string
これは私がやろうとしていることについて十分な詳細を提供しません。
私の目標は、文字列オブジェクトの配列、メッセージ、およびステータスコードに対してスキーマを定義することです。ただし、メッセージとステータスコードはオプションです。これらは他のモデルの一部である可能性もあり、可能であれば、モデルごとに定義を繰り返さないようにします。
私の現在の試みは:
-
name: ReturnArrayResponse
contentType: "application/json"
schema:
type: array
itemsArray:
type: string
message:
type: string
statusCode:
type: number
これで私が望むことはできると思いますが、message
とstatusCode
をオプションにして、他のモデルでこれら2つの項目を繰り返すにはどうすればよいですか?
Serverless.ymlファイルに入れることができるymlソリューション、または参照できるjsonファイルのいずれかに満足しています。
ファイルを含める
与えられた例では、_error.json
_には任意の有効なスキーマを含めることができます。したがって、これと同じくらい単純なもので問題ありません。
_{"type":"object","properties":{"message":{"type":"string"}}}
_
_$schema
_やtitle
などの属性を含めることもできます。
_{
"$schema" : "http://json-schema.org/draft-04/schema#",
"title" : "Error Schema",
"type" : "object",
"properties" : {
"message" : { "type" : "string" },
"statusCode": { "type": "number" },
"itemsArray": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
_
これは、AWSでモデルがすでに定義されているが、それらをビルドするためのサーバーレスyamlがない場合に特に便利です。 AWSコンソールからスキーマをコピーし、jsonをファイルに貼り付けて、質問に記載されているschema: ${file()}
構文を使用するだけです。私が知る限り、AWSコンソールに受け入れさせることができることは何でも機能します。
[〜#〜]ドライ[〜#〜]
サーバーレスファイル内の他のモデル内からモデルを参照する方法はわかりませんが、プラグインの作成者と同じアプローチを使用して、再利用する必要があるものをmodels
の外に置くことができます。どこかで再利用しやすいです。プラグインの作成者はcommonModelSchemaFragments
を使用します。
したがって、そのようなフラグメントがある場合:
_ commonModelSchemaFragments:
# defining common fragments means you can reference them with a single line
StringArrayFragment:
type: array
items:
type: string
HttpResponse:
type: object
properties:
message:
type: string
statusCode:
type: number
_
次のようなモデルでこれらのフラグメントを参照できます。
_ -
name: HttpStatusResponse
contentType: "application/json"
schema:
type: object
properties:
serverResponse:
${self:custom.commonModelSchemaFragments.HttpResponse}
messageArray:
${self:custom.commonModelSchemaFragments.StringArrayFragment}
_
オプションのマーキング属性
これは、属性をrequired
としてマークすることで実現できます。 オプションにしたい属性を除いて、すべての属性のリストを提供するだけです。そのためのjsonスキーマは次のようになります。
_{
"type": "object",
"required": ["message"],
"properties": {
"optionalMessage": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
_
サーバーレスファイルでこのようなyamlを使用してビルドします。
_ -
name: OptionalResponse
contentType: "application/json"
schema:
type: object
required:
- "message"
properties:
message:
type: string
optionalMessage:
type: string
_
リクエストの検証に関する注意
属性required
またはoptional
のマーキングは、リクエスト本文の検証がオンになっている場合にのみ重要です。
特別なサーバーレス構文を使用してリクエスト検証をオンにする方法がわかりません。 resources
セクションでこれを実行できるようですが、私は試していません。 ソース 。
推測(フォーマットを保持するための回答として投稿)-スキーマの最上位エンティティは、object
ではなくarray
である必要があり、次のようになります。
schema:
type: object
properties:
items:
type: array
items:
type: string
message:
type: string
statusCode:
type: number