如何解决OpenAPI 生成未通过自身测试的代码
我正在尝试使用 OpenAPI 生成器构建一个模拟现有服务的测试模拟,因此我在更改架构方面没有太多自由。
我已经将架构归结为以下突出了我的问题:
openapi: 3.0.1
info:
title: Example
version: 1.0.0
servers:
- url: /
paths:
/example:
delete:
description: Delete a thing
operationId: delete_thing
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/deleteThing'
required: true
responses:
"200":
description: OK
"400":
description: Bad request
"500":
description: Unexpected error
tags:
- example
x-amazon-apigateway-request-validator: basic
x-amazon-apigateway-integration:
type: aws_proxy
httpMethod: POST
uri: ${delete_publisher_arn}
x-codegen-request-body-name: body
x-openapi-router-controller: openapi_server.controllers.example_controller
components:
schemas:
deleteThing:
properties:
id:
allOf:
- minLength: 1
- pattern: ^[^<>]*$
- pattern: \S
type: string
required:
- id
type: object
x-amazon-apigateway-request-validators:
basic:
validateRequestBody: true
validateRequestParameters: true
我使用以下命令为python-flask生成脚手架代码:
docker run --rm -v $PWD/openapi-example:/local openapitools/openapi-generator-cli generate -i /local/openapi_server/openapi/openapi.yaml -g python-flask -o /local/.
我看到的问题是为 example_controller
生成的代码需要一个名为 body
的位置参数,但它从未收到:
import connexion
import six
from openapi_server.models.delete_thing import DeleteThing # noqa: E501
from openapi_server import util
def delete_thing(body): # noqa: E501
"""delete_thing
Delete a thing # noqa: E501
:param body:
:type body: dict | bytes
:rtype: None
"""
if connexion.request.is_json:
body = DeleteThing.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'
当我启动服务器并与 Swagger UI 交互时,出现以下异常:
[2021-04-20 15:03:30,107] ERROR in app: Exception on /example [DELETE]
Traceback (most recent call last):
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/app.py",line 2447,in wsgi_app
response = self.full_dispatch_request()
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/app.py",line 1952,in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/app.py",line 1821,in handle_user_exception
reraise(exc_type,exc_value,tb)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/_compat.py",line 39,in reraise
raise value
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/app.py",line 1950,in full_dispatch_request
rv = self.dispatch_request()
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/flask/app.py",line 1936,in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/connexion/decorators/decorator.py",line 48,in wrapper
response = function(request)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/connexion/decorators/uri_parsing.py",line 144,in wrapper
response = function(request)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/connexion/decorators/validation.py",line 184,in wrapper
response = function(request)
File "/home/peter/workspace/openapi-example/venv/lib64/python3.6/site-packages/connexion/decorators/parameter.py",line 121,in wrapper
return function(**kwargs)
TypeError: delete_thing() missing 1 required positional argument: 'body'
127.0.0.1 - - [20/Apr/2021 15:03:30] "DELETE /example HTTP/1.1" 500 -
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。