Я хочу описать API, в котором есть поля, которые позволяют разными способами определять значения при отправке элемента POST, но только когда-либо выводить в поле одним определенным способом.
Например, я мог бы описать API, в котором элемент может быть создан или обновлен следующим образом: {"name": "Task", "due": "2014-12-31"}
или примерно так: {"name": "Task", "due": {"$date": 1419984000000}}
, но он всегда возвращается из API только первым способом.
Таким образом, схема для POST / PUT может быть:
{
"type": "object"
"properties": {
"name": {
"type": "string"
},
"due": {
"oneOf": [
{
"type": "string",
"format": "date"
},
{
"type": "object",
"properties": {
"$date": {
"type": "number"
}
},
"required": ["$date"],
"additionalProperties": false
}
]
}
}
}
Тогда как схема доступа через GET была бы намного проще:
{
"type": "object"
"properties": {
"name": {
"type": "string"
},
"due": {
"type": "string",
"format": "date"
}
}
}
Для потребителей API было бы хорошо знать, что они должны учитывать только один возможный метод вывода, а не все их.
Существует ли какой-либо общепринятый стандартный подход для указания различных схем в контексте гипер-схемы JSON? Я думал об указании этих различий с помощью свойства "links"
, но я не знаю, в каком "rel"
я бы определил эти схемы, и это кажется очень нестандартным.