我有:
我的意图是flask应用程序(所有生成的代码)应该只处理实际REST api的映射和参数解析,以匹配swagger中编码的api规范。在任何参数解析(同样是生成的代码)之后,它应该直接调用我的(未生成的)后端。
我的问题是,在不手工编辑生成的python/flask代码的情况下,如何最好地将这些连接起来?(对我的设计的反馈,或者完成这一点的正式设计模式的细节也很好;我是这个领域的新手)。
刚从生成器中出来,我最终得到了如下python函数:
def create_task(myTaskDefinition):
"""
comment as specified in swagger.json
:param myTaskDefinition: json blah blah blah
:type myTaskDefinition: dict | bytes
:rtype: ApiResponse
"""
if connexion.request.is_json:
myTaskDefinition = MyTaskTypeFromSwagger.from_dict(connexion.request.get_json())
return 'do some magic!' # swagger codegen inserts this string :)
在后端,我有自己的逻辑:
def create_task_backend(myTaskDefinition):
# hand-coded, checked into git: do all the things
return APIResponse(...)
让create_task()
调用create_task_backend()
的正确方法是什么?
现在,我通过以下步骤来解决这个问题
因此,我可以添加新的endpoint,我只需要手动编码对后端的调用~一次。而不是使用补丁文件,我可以通过为生成的代码编写py-parsing语法并使用解析生成的代码来创建对后端的调用来直接执行此操作...这将需要更长的时间,所以我做了这一切作为一个快速的黑客。
这远远不是最优的,我不打算将其标记为已被接受,因为我希望有人能提供一个真正的解决方案。
我以前曾试图使用swagger-codegen
,并遇到了同样的难题。一切都很好,直到您更新规格。虽然您可以使用自定义模板,但这似乎只是大量的开销和维护,而我想要的只是一个设计优先的API。
我最终使用了connexion,它使用swagger规范来自动处理路由、封送、验证等。Connexion构建于flask之上,因此您不需要担心切换框架或任何事情,您将从swagger中自动处理部分应用程序,而不必维护自动生成的代码。
下面的方法对我很有效:
src
-对于我的代码, < li>
src-gen
用于swagger生成的代码, < li>
codegen
,其中我放了一个生成服务器的脚本以及一些技巧。
我将所有模板(在swagger版本中可用)复制到codegen/模板
中,并编辑了contror.mustache
以引用src / server_impl
,因此它可以使用我自己的代码。编辑使用模板语言,因此它是通用的。它仍然不完美(我会改变一些命名约定),但它完成了工作。因此,首先添加到 controller.mustache
:
from {{packageName}}.server_impl.controllers_impl import {{classname}}_impl
然后添加,而不是返回'do some magic!'
以下内容:
return {{classname}}_impl.{{operationId}}({{#allParams}}{{paramName}}{{^required}}=None{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
脚本:
src
有一个server_impl
- 它创建了一个符号链接,以便<code>server_impl</code>可以作为python模块导入
cd ../src-gen/swagger_server/
ln -s ../../src/server_impl/
cd ../../codegen
java -jar swagger-codegen-cli.jar generate \
-i /path_to_your_swagger definition.yaml \
-l python-flask \
-o ../src-gen \
-t ./templates
cd ../src-gen/
python3 -m swagger_server
我使用swagger-codigen-2.1.6和成功生成序列化模型类通过swagger-codigen-maven-plugin使用序列化模型配置选项。但是,我没有看到序列VersionUID添加到类中,也找不到任何留档来包含它。任何帮助都将不胜感激。提前感谢。
比如 其实相当于 代码不需要手动处理就可以执行。
我需要在eclipse中使用with swagger codegen插件(用于maven)生成服务器存根代码。你能帮我怎么做吗?以及需要什么配置(在pom.xml中)。
问题内容: 从Python 2.6的迭代器中获取最后一项的最佳方法是什么?例如说 从中获取最短代码/最干净的方法是什么? 我可以这样做,但是效率似乎不高: 问题答案:
问题内容: 我已经开始使用gwt进行一些基本的Java编码,而我有点担心主类的繁重。 例如- 如何分隔密钥处理程序,因为它们触发了UI的许多更改,我如何才能将其移到单独的.class文件中,并且仍然能够访问主类中的所有各种小部件,而不必将所有内容传递给处理程序(即,我在click事件之后处理的所有小部件)。 我已经在Google上搜索过,但是没有遇到任何特别好的例子- 知道我可以阅读的任何易读的代
我刚刚开始使用Swagger和NodeJS。我能够在我的NodeExpress应用程序中实现Swagger,并且还能够准确地使用Swagger-Codesen(Typecript-Angular)生成typecript-client-code。 我遇到的一个问题是,生成的代码分布在许多不同的文件中。我希望它只输出一个文件