具有python-eve的多态类型

时间:2014-11-17 15:43:53

标签: python eve

我希望有一个端点可以验证多个模式。我已经阅读了文档和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提供的引用完整性?

1 个答案:

答案 0 :(得分:1)

嗯,我不确定我理解你的问题。乍一看,我会说这正是API端点的正常行为。我假设propeller_sizewing_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端点添加的字段。