[
关注
6月12日
-
3分钟阅读
带有OpenAPI规格的Mustache模板
OpenAPI代码生成的最佳功能
本文探讨了在OpenAPI规范背景下的Mustache模板,以及那些可以帮助开发者优化代码生成的被低估的功能。
在Adyen,我们在一段时间前就采用了OpenAPI规范,我们创建了自己的Mustache模板,以便在每次有新的支付API发布时简化Adyen SDK(各种语言)的生成。
Mustache是一个无逻辑的模板框架,用于生成必须符合我们想要控制的结构和格式的输出。这些应用有几个:生成代码、HTML、配置文件等。
它们是无逻辑的(意味着实际的模板引擎必须负责转换逻辑),简单(只具有你需要的功能--没有任何装饰)和开源的。
简而言之
给定一个模板
Hello {{name}} {{lastname}}
和一个数据结构
{ "name": "Beppe", "lastname": "Catanese"}
模板引擎将知道如何产生
Hello Beppe Catanese
OpenAPI语言模板
OpenAPI生成器项目允许从有效的OpenAPI规范开始生成(客户端、服务器和模型)代码,无论是json 还是yaml 。对于代码和API规范经常变化并需要保持一致的API驱动的产品来说,这是一个非常有价值的功能(在理想情况下是小的努力)。
在这个工作流程中,Mustache模板起到了关键作用:对于每一种语言和框架,OpenAPI都提供了一个默认的实现(基于预定义的Mustache模板),在大多数情况下都能很好地工作,并且可以在需要时进一步调整(扩展模板)。
成为一个Mustache大师
让我们深入了解使Mustache模板真正强大的更多高级功能。
参数列表
使用^last ,在参数之间添加逗号,除非它是最后一个。
{{#allParams}}paramName *{{{dataType}}}{{^last}}, {{/last}}{{/allParams}}
用序列命名参数
在遍历一个数组或列表时,使用-index 来访问索引
{{#allParams}}req{{-index}} *{{{dataType}}}{{^last}}, {{/last}}{{/allParams}}
区分不同的参数
虽然allParams 可以访问整个参数列表,但在生成方法签名或文档时,对参数进行区分是非常有用的。
{{#pathParams}}...{{/pathParams}}{{#bodyParams}}...{{/bodyParams}}{{#queryParams}}...{{/queryParams}}
注释
注释在模板中也很有用,但很少见。
/**Info about the method {{! comments to be ignore when parsing the template}} **/
自定义定界符
默认的定界符{{ 和}} 可以被覆盖(一些脚本语言使用大括号)。
{{! change delimiters to <% and %>}}{{=<% %>=}}
第一个和最后一个元素
在遍历数组时,方便地访问第一个和最后一个元素是非常有用的,例如Go导入将所有模块归入一个以小括号开始和结束的列表中。
{{#-first}}import ({{/-first}} "{{import}}"{{#-last}}){{/-last}}
兰巴函数
在OpenAPI codegen阶段有一小部分函数可用:当你需要小写包名或CamelCase方法时,这些函数很方便。
lowercase(Beppe) -> beppeuppercase(Beppe) -> BEPPEtitlecase(Beppe likes mustache) -> Beppe Likes Mustachecamelcase(Beppe-Catanese) -> BeppeCataneseindented -> add indentation
创建自定义生成器
当需要进行特定的定制时,OpenAPI codegen允许扩展特定语言的生成器,以增加(或重新定义)生成逻辑。通过扩展的方法是非常直截了当的。
1:扩展客户端代码生成器(例如,实现operatingId属性的重命名)
2:使用新的生成器生成代码
使用新的CodeGen实现来生成客户端代码
java -jar openapi-generator-cli.jar generate \-i /openapi.yaml -t templates/go -g go \-p packageName=Checkout -o src/checkout \-g org.mycompany.codegen.MyGoClientCodegen
总结
查看我们的Go Library,看看Mustache模板的定制以及如何从Adyen OpenAPI规范开始进行代码生成。准备好迎接更多关于我们的OpenAPI工作的文章和见解(即生成服务器存根、测试、嘲弄和验证)。
迟些时候!