使用Swagger 2.0更改请求参数验证失败时的响应代码

时间:2014-10-06 16:54:29

标签: swagger apigee swagger-tools

我在swagger上使用Apigee 127来创建REST API。

这是配置文件swagger.yaml的头部:

swagger: 2.0
info:
  version: "0.0.1"
  title: LMS API Gateway
# during dev, should point to your local machine
host: localhost
# basePath prefixes all resource paths 
basePath: /
# 
schemes:
  # tip: remove http to make production-grade
  - http
  - https
# format of bodies a client can send (Content-Type)
consumes:
  - application/json
# format of the responses to the client (Accepts)
produces:
  - application/json
x-a127-config: {}
x-volos-resources: {}
paths:
  /lms/oauth2/token:
    # binds a127 app logic to a route
    x-swagger-router-controller: authentication
    x-volos-authorizations: {}
    x-volos-apply: {}
    post:
      description: Authenticates a user
      operationId: authenticate
      parameters:
        - name: body
          in: body
          description: The JSON request body
          required: true
          schema: 
            $ref: AuthenticationRequest
      responses:
        "200":
          description: Success
          schema:
            $ref: AuthenticationResponseSuccess
        default:
          description: Error
          schema:
            $ref: AuthenticationResponseError

然后我有了这个AuthenticationRequest 架构对象,它描述了身份验证请求体应该如何。到目前为止一切都很好。

当我提出有效请求时,它工作正常,但当我制作无效请求时,我会得到以下回复:

HTTP/1.1 500 Internal Server Error
X-Powered-By: Express
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Content-Length: 60
Date: Mon, 06 Oct 2014 16:31:08 GMT
Connection: keep-alive

Parameter (body) is not a valid AuthenticationRequest model

如果我的API规范没有指定我必须为无效请求返回400 Bad Request响应代码(顺便说一句,这样会更有意义),那就不会有问题了。

所以问题是我无法在Swagger文档中找到改变此行为的方法。

任何?

1 个答案:

答案 0 :(得分:2)

它现在按照设计工作。 swagger-validator的工作方式是将错误传递给下一个中间件,在这种情况下,如果没有中间件来处理这个问题,你会得到一个500。 (参见swagger-validator.js#L119)这种方式发生的原因是允许应用程序作者在需要时拦截它。这是故意的,但我可以看到有人可能希望让中间件发送响应但是在内容类型(JSON与XML与HTML vs. ...)和结构(包括...)方面做得恰到好处可能会很痛苦(什么是错误的有效结构?)。

为了让事情按照您的意愿运行,您需要添加一个错误处理程序中间件,它将适当地格式化响应及其状态代码。根据您的服务器(连接,快速等),您的工作方式可能会有所改变。

如果你觉得招摇 - 工具应该提供相应的设施,请尽可能多地提供有关你希望如何工作的信息。