使用falcon-swagger-ui在Falcon中部署Swagger文档报错求助
解决Falcon中部署Swagger UI时的参数错误问题
首先,咱们来拆解你遇到的错误:TypeError: __call__() takes exactly 4 arguments (3 given)。这个问题出在StaticSinkAdapter的调用签名和Falcon的sink机制不匹配——该适配器的__call__方法期望接收4个参数(self, req, resp, params),但当你用add_sink挂载它时,Falcon在没有路径参数的情况下只会传递3个参数,导致报错。
修复你的现有代码
你可以不用StaticSinkAdapter,而是自己写一个简单的Falcon资源类来返回schema.json的内容,这样更稳妥:
import falcon import json from falcon_swagger_ui import register_swaggerui_app SWAGGERUI_URL = '/swagger' SCHEMA_URL = '/swagger.json' class SwaggerSchemaResource: def on_get(self, req, resp): # 读取本地schema.json文件 with open('/home/greg/falcon-swagger-example/schema.json', 'r') as f: schema_data = json.load(f) resp.media = schema_data resp.content_type = falcon.MEDIA_JSON app = falcon.API() # 挂载自定义的schema资源 app.add_route(SCHEMA_URL, SwaggerSchemaResource()) # 注册Swagger UI register_swaggerui_app(app, SWAGGERUI_URL, SCHEMA_URL, config={ 'supportedSubmitMethods': ['get'], })
这样修改后,/swagger.json会正确返回你的API schema,Swagger UI也能正常加载它。
关于Falcon的Swagger文档工具推荐
如果你想找更适配Falcon的方案,这些工具会更顺手:
- falcon-openapi:专门为Falcon设计的OpenAPI(Swagger)支持工具,能自动从Falcon资源生成OpenAPI schema,也支持挂载Swagger UI,配置更简洁。
- 直接用Swagger UI CDN:如果你的schema是静态文件,可以直接在Falcon中挂载静态目录,然后写一个简单的HTML页面引入Swagger UI的CDN资源,指向你的
schema.json,这种方式轻量且灵活。
内容的提问来源于stack exchange,提问作者Greg Lever
相关产品推荐
相关产品推荐

