为了少写代码,统一前后端的网络层,我使用了OpenApi设计restful接口。然后用openapi-generator来生成flutter的代码。生成go代码用的是oapi-codegen,它对go更友好一些。
我们直接在api.yml中设计接口,所有的返回值与请求者都提取到components里的schemas,responses里面去,这样生成的model命名更规范。
注意
1.go中的ID一般全部大写,而flutter这些是驼峰命名,所以要用x-go-name: ID来告诉生成go代码的时候用大写。
2.上传文件接口,上传多个文件的时候,生成的flutter代码final List? files;前面没有加@JsonKey(includeFromJson: false, includeToJson: false), 如果是单文件的就加了的。需要用vendorExtensions修改模版来生成
首先我们介绍go端的流程。
首先就是install插件
go install github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@latest
然后就能生成对应的go代码
oapi-codegen -config config.yml api.yml
flutter端的流程:
brew install openapi-generator
然后生成flutter代码
openapi-generator generate \-i api.yml \-g dart-dio \-o ./client_api \-t ./templates/dio \--additional-properties=serializationLibrary=json_serializable --global-property skipFormModel=false,modelDocs=false,apiTests=false,modelTests=false,enumUnknownDefaultCase=true
-g 有两个值 dart 与 dart-dio, dart就用内置的网络库,dart-dio用了一些第三方库如dio,json_serializable
-t 是模版,官方的模版可以再git clone https://github.com/OpenAPITools/openapi-generator.git下来在目录openapi-generator/modules/openapi-generator/src/main/resources/dart/libraries/dio里面可以看到,copy一份来修改即可。
这样就可以为我们生成go与flutter两端的接口代码,少写很多代码哦。