我应该如何处理 Swagger 中的 application/javascript 响应类型?
How should I handle an application/javascript response type in Swagger?
我有一个 swagger 应用程序可以在返回 JSON 时运行,但不能与 JSONP 一起运行。成功和失败的案例在下面进一步描述。
值得注意的是,下面显示的确切控制器代码在 vanilla node/express 下工作正常 - 当响应通过 swagger 响应验证器时似乎会出现问题。
处理响应的控制器代码片段如下:
retVal.success = true;
retVal.data = jsondata;
res.set('Content-Type', 'application/javascript');
res.jsonp(200, retVal);
swagger.yaml:
swagger: "2.0"
info:
title: sometitle
version: v1
host: localhost:3000
basePath: /
schemes:
- http
consumes:
- application/json
- application/javascript
produces:
- application/json
- application/javascript
- text/javascript
paths:
/loadallrepos:
x-swagger-router-controller: loadallrepos
get:
summary: summary here...
description: |
description here...
operationId: loadallrepos
parameters:
- name: callback
in: query
description: Passed by .ajax call for cross-domain requests
required: false
type: string
responses:
200:
description: Success
schema:
$ref: "#/definitions/loadallreposResponse"
definitions:
loadallreposResponse:
type: object
required:
- success
- data
properties:
success:
type: boolean
data:
type: object
required:
- nextrefresh
properties:
nextrefresh:
type: integer
如果我在没有回调参数的情况下发出请求,它会起作用:
请求:localhost:3000/loadallrepos
回复:
{
"success": true,
"data": {
"nextrefresh": 3439704
}
}
如果我把它变成一个 jsonp 请求,它会失败:
请求:localhost:3000/loadallrepos?callback=jQuery111106460774131119251_1439402109118&_1439402109119
回复:
{
"message": "Response validation failed: value expected to be an array/object but is not",
"failedValidation": true,
"originalResponse": "typeof jQuery111106460774131119251_1439402109118 === 'function' && jQuery111106460774131119251_1439402109118({
"success": true,
"data": {
"nextrefresh": 3442750
}
});"
}
同样,这在原版 node/express 下有效。非常感谢任何帮助!
JSONP APIs return一串JavaScript。您的 Swagger 定义说您的 API return 是一个定义在 #/definitions/loadallreposResponse
的对象,属于 type
object
。发生的事情是 swagger-node/swagger-tools 看到 object
的 type
并尝试在响应主体上使用 JSON.parse
但失败了。要使用 Swagger 支持 JSONP,您需要将响应模式设为 type
string
以避免响应验证失败。
我有一个 swagger 应用程序可以在返回 JSON 时运行,但不能与 JSONP 一起运行。成功和失败的案例在下面进一步描述。
值得注意的是,下面显示的确切控制器代码在 vanilla node/express 下工作正常 - 当响应通过 swagger 响应验证器时似乎会出现问题。
处理响应的控制器代码片段如下:
retVal.success = true;
retVal.data = jsondata;
res.set('Content-Type', 'application/javascript');
res.jsonp(200, retVal);
swagger.yaml:
swagger: "2.0"
info:
title: sometitle
version: v1
host: localhost:3000
basePath: /
schemes:
- http
consumes:
- application/json
- application/javascript
produces:
- application/json
- application/javascript
- text/javascript
paths:
/loadallrepos:
x-swagger-router-controller: loadallrepos
get:
summary: summary here...
description: |
description here...
operationId: loadallrepos
parameters:
- name: callback
in: query
description: Passed by .ajax call for cross-domain requests
required: false
type: string
responses:
200:
description: Success
schema:
$ref: "#/definitions/loadallreposResponse"
definitions:
loadallreposResponse:
type: object
required:
- success
- data
properties:
success:
type: boolean
data:
type: object
required:
- nextrefresh
properties:
nextrefresh:
type: integer
如果我在没有回调参数的情况下发出请求,它会起作用:
请求:localhost:3000/loadallrepos
回复:
{
"success": true,
"data": {
"nextrefresh": 3439704
}
}
如果我把它变成一个 jsonp 请求,它会失败:
请求:localhost:3000/loadallrepos?callback=jQuery111106460774131119251_1439402109118&_1439402109119
回复:
{
"message": "Response validation failed: value expected to be an array/object but is not",
"failedValidation": true,
"originalResponse": "typeof jQuery111106460774131119251_1439402109118 === 'function' && jQuery111106460774131119251_1439402109118({
"success": true,
"data": {
"nextrefresh": 3442750
}
});"
}
同样,这在原版 node/express 下有效。非常感谢任何帮助!
JSONP APIs return一串JavaScript。您的 Swagger 定义说您的 API return 是一个定义在 #/definitions/loadallreposResponse
的对象,属于 type
object
。发生的事情是 swagger-node/swagger-tools 看到 object
的 type
并尝试在响应主体上使用 JSON.parse
但失败了。要使用 Swagger 支持 JSONP,您需要将响应模式设为 type
string
以避免响应验证失败。