简单的 Swagger.v2 数组定义没有响应

Simple Swagger.v2 array definition not responding

我正在努力学习招摇。为返回

的简单 api 创建一个模拟服务器

A) {id: someid, name: some name}

形式的对象

b) 这些对象的数组

我有第一部分工作,但第二部分将无法工作。知道的人可以看看我下面的 YAML 定义吗?

1
2
3
4
5
6
7
8
9
10
11
swagger:"2.0"

info:
  version: 1.0.0
  title: Simple API
  description: A simple API to learn how to write OpenAPI Specification

schemes:
  - http
host: localhost:8080
basePath: /

这里定义了两个路径,第一个(/api/dataset)有效,第二个(/api/datasets)无效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
paths:
  /api/dataset:
    get:
      summary: summary
      description: desc
      responses:
        200:
          description: dataset
          schema:
            $ref: '#/definitions/dataset'

  /api/datasets:
    get:
      summary: summary
      description: desc
      responses:
        200:
          description: datasets list
          schema:
            $ref: '#/definitions/datasets'

这些是定义,我怀疑我在这里做错了...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
definitions:
  dataset:
    type: object
    properties:
      dataset_id:
        type: string
      name:
        type: string
    required:
      - dataset_id
      - name
    example:
      dataset_id: FunnyJokesData
      name: FunnyJokesData
  datasets:
    type: array
    items:
      $ref: '#/definitions/dataset'
    example:
      - dataset_id: example_01
        name: example_01
      - dataset_id: example_02
        name: example_02
      - dataset_id: example_03
        name: example_03

使用此定义生成Stubbing服务器后,curl 响应
/api/dataset 有一个响应正文:

$ curl -X GET"http://localhost:8080/api/dataset" -H "accept: application/json"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 64 0 64 0 0 4000 0 --:--:-- --:--:-- --:--:-- 4000{
"dataset_id":"FunnyJokesData",
"name":"FunnyJokesData"
}

但 \\'/api/datasets\\' 的 curl 响应为空:

$ curl -X GET"http://localhost:8080/api/datasets" -H "accept: application/json"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0

我不明白为什么一个有效而另一个无效。

感谢收看


我猜"不会工作"只适用于 Node.js 服务器Stubbing,因为 Python/Flask Stubbing为两个端点返回字符串 "do some magic!" 而不是 JSON。

看起来 Swagger Codegen 的 Node.js 生成器不支持数组级别的 example,所以对应的响应为空。您可以在此处提交错误报告:https://github.com/swagger-api/swagger-codegen/issues。

似乎与 Node.js 生成器一起使用的一种解决方法是改用响应示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  /api/datasets:
    get:
      summary: summary
      description: desc
      responses:
        200:
          description: datasets list
          schema:
            $ref: '#/definitions/datasets'

          examples:
            application/json:
              - dataset_id: example_01
                name: example_01
              - dataset_id: example_02
                name: example_02
              - dataset_id: example_03
                name: example_03