我想要一个针对多个模式进行验证的端点。我已经阅读了文档和 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
提供的引用完整性?
最佳答案
嗯,我不确定我是否理解你的问题。乍一看,我会说这正是普通 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 时,您将获得可用文档的列表:
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 或事件 Hook (回调)添加),或通过其他 API 端点。
关于python - python-eve 的多态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976354/