在 Swagger 中对 GeoJSON 建模

Modelling GeoJSON in Swagger

我正在尝试在为 JSON 服务的 Swagger API 中添加 GeoJSON 的定义。我 运行 遇到了一些关于定义 GeoJSON 具有的功能选项的问题。

单个特征可以选择 "Point""MultiPoint""LineString""MultiLineString""Polygon""MultiPolygon" .尽管这些中的每一个都对其 coordinates 字段施加了不同的约束。例如,一个点可能有一个由经度纬度 pai 组成的坐标,而多边形可能有一个如下所示的字段: [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ].

我环顾四周,但除了将几何体定义为 string 而不是像这样的复杂对象之外,似乎没有解决此问题的优雅方法。这意味着信息丢失,并且不希望基于 Swagger 规范移植 APIs,因为必须首先将输入字符串解析为对象。

GeoJSON 对象看起来像 this

到目前为止我得到的是:

  "Feature": {
      "type": "object",
      "properties": {
        "id": {
        },
        "geometry": {
          "$ref": "#/definitions/Geometry"
        },
        "type" : {
          "type" : "string"
        },
        "properties": {
            "type": "object"
        }
    }
}

几何定义如下所示:

"Geometry": {
  "type": "object",
  "properties": {
    "type":{
      "type": "string",
      "enum": ["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"]
    },
    "coordinates": {
      "type": "array",
      "items": {
        "type": "number",
        "example": [4.49965, 52.06891]
      }
    }
  }
}

恐怕无法使用 Swagger 来描述它。您可以描述单一类型,但不能描述 accept/produce 所有类型。

你检查过这个要点文件了吗:geometry_geojson-yaml

在我看来,最近的尝试是这个:https://app.swaggerhub.com/apis/OlivierMartineau/GeoJSON/1.0.1

它是由“OlivierMartineau”又名“zitoun”或“zit0un”创建的,他使用了已经提到的(@jmini)“bubbobne”的“gist”以及其中一个叉子“idkw”作为他模型的基础。