我如何指定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=byLocationlat是强制性的,…

我们应该如何处理这两条在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" } } } } } }