Ответ 1
Включение файла
В приведенном примере 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, но у вас нет серверного ямла для их создания. Вы можете просто скопировать схему из консоли AWS, вставить json в файл и использовать синтаксис schema: ${file()}
, упомянутый в вопросе. Насколько я могу судить, что вы можете заставить консоль AWS принять, будет работать.
DRY
Я не знаю способа ссылки на модели из других моделей в безсерверном файле, но вы можете использовать тот же подход, что и авторы плагинов, и просто поместить все, что вам нужно для повторного использования вне 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
, но я этого не пробовал. Источник.