我如何指定2个不同查询组合选项的1个API路线
我如何指定2个不同查询组合选项的1个API路线
我们有2条路线:
GET /api/v1/resource?filter=byName&key=restaurant&city=chicago GET /api/v1/resource?filter=byLocation&lat=34&long=78
在soaJS
,我们描述了这样的模式:
//文件config.js
module/exports = { type: 'service', ... schemas: { ... commonFields: { filter: { source: ["query.filter"], required: true, validation: { type: "string", enum: ["byName", "byLocation"] } }, key: { source: ["query.key"], required: true, validation: { type: "string" } }, lat: { source: ["query.lat"], required: true, validation: { type: "number" } }, long: { source: ["query.long"], required: true, validation: { type: "number" } }, ... // city }, get: { "/api/v1/resource": { "_apiInfo": { "l": "get resource by ?", "m": "get" }, "commonFields": [ ? ], } ... }
当filter=byName
,那么key
是强制性的,…
当filter=byLocation
, lat
是强制性的,…
我们应该如何处理这两条在REST哲学方面的路线定义?
谢谢
SOAJS IMFV基于json模式。 你可以通过使用oneOf来实现。 请检出这个urlhttps://spacetelescope.github.io/understanding-json-schema/
这里是你如何做到这一点:
{ schema : { post : { "/imfvOneOf": { "_apiInfo": { "l": "Example of IMFV & oneOf", "group": "Basic" }, "data": { "source": ["body.data"], "required": true, "validation": { "oneOf": [ { filter: { required: true, type: "string", enum: ["byName"] }, key: { required: true, type: "string" } }, { filter: { required: true, type: "string", enum: ["byLocation"] }, lat: { required: true, type: "number" } } ] } }, long: { source: ["body.long"], required: true, validation: { type: "number" } } } } } }