5

私はSwagger-phpを使用しています。クエリ文字列にあるパラメーターを定義すると、配列にすることができます。しかし、私が見る限り、この種のクエリ文字列はサポートされていません:

https://api.domain.tld/v1/objects?q[]=1&q[]=5&q[]=12

可能であれば、これはcollectionFormatフィールドに設定されると思います。現在は を使っているだけpipesですが、上記のフォーマットを使いたいし、Swagger-UI にも反映させたいです。しかし、これが実際に可能かどうか疑問に思っていたこのgithubの問題を読んだのですが、見逃してしまいましたか?

私の Swagger-PHP 定義の例:

/**
*     @SWG\Parameter(
*         name="ids",
*         in="query",
*         description="A list of IDs (separated by pipes) to filter the Returns",
*         required=false,
*         type="array",
*         @SWG\Items(
*             type="integer",
*             format="int32"
*         ),
*         collectionFormat="pipes"
*     )
*/

これにより、次の JSON が生成されます。

"parameters": {
    "ids": {
        "name": "ids",
        "in": "query",
        "description": "A list of IDs (separated by pipes) to filter the Returns",
        "required": false,
        "type": "array",
        "items": {
            "type": "integer",
            "format": "int32"
        },
        "collectionFormat": "pipes"
    }
}
4

7 に答える 7

2

これを実行してください。これは私の仕事です

 /**
 *     @SWG\Parameter(
 *         name="id[]",
 *         in="query",
 *         description="A list of IDs (separated by new lines) to filter 
            the Returns",
 *         required=false,
 *         type="array",
 *         collectionFormat="multi",
 *        @SWG\Items(
 *             type="integer",
 *             format="int32"
 *         ),
 *         uniqueItems=true,
 *     )
 */
于 2018-06-04T11:28:43.653 に答える
1

残念ながら、配列クエリ パラメータに対して指定した URL ( ) を正確に取得することはできません。https://api.domain.tld/v1/objects?q[]=1&q[]=5&q[]=12

1 次元配列のクエリ パラメータを定義すると仮定すると (参照している github の問題は多次元配列に関係します)、現在の OpenAPI (fka.Swagger) 仕様で提案できるものは次のとおりです。

  • のようなコレクション形式の配列を使用する場合(別の区切り文字を取得するために 、またはをpipes使用することもできます)、URL は次のようになります。 csvssvtsv

    https://api.domain.tld/v1/objects?q=1|5|12
    

    しかし、これはあなたが探している構文ではありません。すべての配列項目が単一のqクエリ パラメータで定義されています。

  • multi幸いなことに、各配列の項目を独自のqパラメーターで定義できる別のコレクション形式があり、これを使用すると、必要なものを除いてほとんど[]取得できます。

    https://api.domain.tld/v1/objects?q=1&q=5&q=12
    

詳細については、このOpenAPI (fka.Swagger) チュートリアル(開示: 私が書きました) と仕様自体 (ParameterObject の説明)を参照してください。

于 2016-06-18T16:23:38.980 に答える
0

次のコードは問題なく動作します:スクリーンショットを参照してください

'"パラメーター": [

      {

        "name": "fav",

        "description": "Enter ids of Favoruite",

        "in": "formData",

        "type": "array",

        "items": {

          "type": "integer",

          "format": "int32"

        },

        "paramType": "form",

        "required": true

      }],'
于 2018-12-03T04:00:10.747 に答える
0

免責事項:私はSwaggerUIを使用していますが、これもうまくいくかもしれません。

私もこれについてしばらく疑問に思っていましたが、jsコードを調べて、そこで変更/修正できるかどうかを確認することにしました。次の数行のコードに気付きました。

if (type === 'brackets' || type === 'multi') {
    var bracket = type === 'brackets' ? '[]' : ''
    for (var i = 0; i < value.length; i++) {
        if (i > 0) {encoded += '&';}

        encoded += this.encodeQueryParam(name) + bracket + '=' + this.encodeQueryParam(value[i]);
    }
}

そのため、OpenAPI v2仕様で定義されていないcollectionFormat 'brackets' があるようです。試してみたところ、うまくいっているようです。

于 2016-10-20T06:42:49.000 に答える