為了少寫代碼,統一前后端的網絡層,我使用了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兩端的接口代碼,少寫很多代碼哦。