我希望有一个端点可以验证多个模式。我已经阅读了文档和Eve的一些代码,但我不能立即明白这是可能的。以下是我希望能够做到的一个简单示例:
POST http://eve-server/vehicles/
{
type: 'Boat',
manufacturer: 'Seadoo',
propeller_size: 2.0
}
POST http://eve-server/vehicles/
{
type: 'Airplane',
manufacturer: 'Boeing',
wing_span: 195.8
}
GET http://eve-server/vehicles/
[
{type: 'Boat', manufacturer: 'Seadoo', propeller_size: 2.0},
{type: 'Airplane', manufacturer: 'Boeing', wing_span: 195.8}
]
Eve / Cerberus是否支持这样的多态类型?如果没有,是否可以插入支持此功能的JSON Schema,同时保持data_relation
提供的引用完整性?
答案 0 :(得分:1)
嗯,我不确定我理解你的问题。乍一看,我会说这正是API端点的正常行为。我假设propeller_size
和wing_span
是可选字段。您可以像示例一样发布一个文档:
POST http://eve-server/vehicles/
{
type: 'Boat',
manufacturer: 'Seadoo',
propeller_size: 2.0
}
POST http://eve-server/vehicles/
{
type: 'Airplane',
manufacturer: 'Boeing',
wing_span: 195.8
}
或者您可以发布文档列表:
POST http://eve-server/vehicles/
[
{type: 'Boat', manufacturer: 'Seadoo', propeller_size: 2.0},
{type: 'Airplane', manufacturer: 'Boeing', wing_span: 195.8}
]
在这两种情况下,当您在同一端点获取时,您将获得可用文档列表:
GET http://eve-server/vehicles/
{
"_items": [
{type: 'Boat', manufacturer: 'Seadoo', propeller_size: 2.0},
{type: 'Airplane', manufacturer: 'Boeing', wing_span: 195.8}
]
"_meta": {
"total": 259,
"page": 1,
"size": 25
}
}
假设HATEOAS已被禁用,否则您将获得_links
元字段。
这就是说,请记住你可以设置multiple endpoints all targeting the same datasource,这样你就可以拥有一个只有POST的端点,它有自己的架构和验证,也可能是一个只有GET的端点,它有不同的架构,可能是因为在这样的端点,你将返回通过mongo,事件挂钩(回调)或其他API端点添加的字段。