我希望有一个根据多个模式进行验证的端点。我读过文档和一些伊芙的代码,但我不清楚这是否可能。下面是一个简单的例子,说明我想做什么:
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模式的东西来支持它,同时保持
data_relation
提供的引用完整性? 最佳答案
嗯,我不太明白你的问题。乍一看,我认为这正是普通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-only端点,也可以有一个具有不同模式的GET-only端点,这可能是因为在这个端点上,您返回的字段是通过mongo、事件挂钩(回调)或其他API端点添加的。