Android使用Retrofit有数千个API调用时如何处理API接口类?
首先可以明确告诉你,完全不需要按照示例格式手写所有数千个API声明,这类场景有成熟的优化和替代方案,常用处理方式如下:
1. 首选方案:自动生成接口代码
现在后端几乎都会用Swagger/OpenAPI、YApi、Apifox这类接口文档管理工具,你可以直接用对应的代码生成工具,批量生成Retrofit的接口服务类、请求参数实体、响应实体,全程不需要手动编写接口声明。
常用的生成工具包括OpenAPI Generator、swagger-codegen,还有适配国内接口工具的各类Gradle插件,配置好包名、生成规则之后,一键就能生成全量接口代码,后续后端接口更新也可以直接重新生成,还能避免手动拼写接口地址、参数的低级错误。
2. 次选方案:封装通用动态请求
如果你的项目接口请求格式高度统一,也可以封装通用的动态请求工具,只需要声明一个通用服务接口即可,不用每个接口单独写注解声明。
示例封装代码如下:
// 通用服务接口,全项目只需要这一个接口声明 interface CommonApiService { @POST fun <T> post( @Url apiPath: String, @Body params: HashMap<String, Any> ): Call<T> @GET fun <T> get( @Url apiPath: String, @QueryMap params: HashMap<String, Any> ): Call<T> } // 上层调用封装,用的时候直接传对应参数即可 inline fun <reified T> requestPost( apiPath: String, params: HashMap<String, Any>, callback: NetCallback<T> ) { retrofit.create(CommonApiService::class.java) .post<T>(apiPath, params) .enqueue(callback) }
这种方案适合接口规则统一的项目,调用的时候只需要传入接口路径、请求参数、响应解析类即可,省去了所有单个接口的声明工作。
3. 手动维护的优化方案
如果确实需要手动维护接口,也不要把所有接口塞到同一个服务类中,按业务模块拆分即可:
- 用户相关接口放到
UserApiService - 订单相关接口放到
OrderApiService - 支付相关接口放到
PayApiService
每个业务模块的接口单独存放在一个服务类中,既方便维护,也能避免多人开发时同一个文件的修改冲突。
替代方案
如果不想用Retrofit的注解式接口声明,也可以换用其他网络框架,比如OkHttp的上层封装库(OkGo、FastAndroidNetworking),Kotlin项目还可以选择Ktor Client,这类框架都支持动态构造请求,不需要提前声明接口。
小提示:中大型项目优先选择自动生成代码的方案,这是行业内的通用做法,完全没必要花时间手写几千个接口做体力活。
内容的提问来源于stack exchange,提问作者Mohit Dholakia

