3

我想要一个针对多个模式进行验证的端点。我已经阅读了文档和 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提供的引用完整性?

4

1 回答 1

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元字段。

话虽这么说,请记住,您可以设置多个端点都针对同一个数据源,因此您可以拥有一个具有自己的架构和验证的仅 POST 端点,也可能是具有不同架构的仅 GET 端点,可能是因为在因此,您返回的端点是通过 mongo、事件挂钩(回调)或其他 API 端点添加的字段。

于 2014-11-17T19:08:03.853 回答