Pai*_*olo 3 flask swagger-editor swagger-codegen
我正在使用 swagger 编辑器(版本 2.10.5)生成一个使用自定义标头的 Flask api,并开始向每个路径添加以下行:
parameters:
- $ref: '#/parameters/X-Forwarded-Host'
Run Code Online (Sandbox Code Playgroud)
相对定义:
X-Forwarded-Host:
name: 'X-Forwarded-Host'
in: header
description: Forwarded host header
required: true
type: string
Run Code Online (Sandbox Code Playgroud)
然后运行自动生成的flask server
$ python3 -m swagger_server
Run Code Online (Sandbox Code Playgroud)
造成一些问题:
发出 curl 请求时,标头未正确评估:
$ curl -X GET --header 'Accept: application/json' --header 'X-Forwarded-Host: example.com' http://localhost:8080
Run Code Online (Sandbox Code Playgroud)
返回
health_get() missing required positional argument: 'X_Forwarded_Host'
Run Code Online (Sandbox Code Playgroud)自动生成的测试也没有用:
headers = [('X_Forwarded_Host', 'X_Forwarded_Host_example'), ...
Run Code Online (Sandbox Code Playgroud)我究竟做错了什么?为什么swagger-editor(或codegen)将所有“-”设置为“_”?
提前致谢
好吧,我想通了..
问题不在于 swagger-editor 本身,而在于它如何生成 Flask (Connexion) 代码。
Connexion 请求处理文档 ( url ) 说:
“目前,标头参数不会作为参数传递给处理函数。但它们可以通过底层 connexion.request.headers 对象访问,该对象别名为flask.request.headers 对象。”
解决方案是从自动生成的控制器中删除所有函数属性(与头相关)并从请求对象中选择它们,因此:
从:
def health_get(X_Forwarded_Host):
...
Run Code Online (Sandbox Code Playgroud)
到:
def health_get():
forwarded_host = connexion.request.headers['X-Forwarded-Host']
Run Code Online (Sandbox Code Playgroud)
再见!
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |