解决Retrofit多BaseUrl及运行时动态改变BaseUrl(二)

本文详细介绍了RetrofitUrlManager库针对多BaseUrl和动态改变BaseUrl的升级,包括普通模式、高级模式和超级模式的原理、用法和替换规则。高级模式允许替换包含多个pathSegment的BaseUrl,而超级模式提供了更高的灵活性,每个URL可以指定自己的BaseUrl格式。通过比较三种模式的可扩展性和使用复杂度,帮助开发者根据需求选择合适的模式。
摘要由CSDN通过智能技术生成

原文地址: https://www.jianshu.com/p/35a8959c2f86

前言

我在之前的文章 《解决Retrofit多BaseUrl及运行时动态改变BaseUrl》 中,介绍了市面上能够解决此类问题的 4 个常见的解决方案,并开源了自己经过优化后的解决方案 RetrofitUrlManager,现在再为大家带来此系列的第二篇文章,这篇文章主要介绍 RetrofitUrlManager 针对 BaseUrl 替换逻辑的重大升级,因为这个升级对于 RetrofitUrlManager 足够重要,将使 RetrofitUrlManager 能够从容应对更多复杂的需求,所以单独写一篇文章让更多的人能够知道

Github : 您的 Star 是我坚持的动力 ✊

为什么不使用多 Retrofit 实例的方案?

在上篇文章 《解决Retrofit多BaseUrl及运行时动态改变BaseUrl》 中,4 种方案的特点和不足我都描述的很清楚,建议没看过这篇文章的可以去看看这篇文章,扩宽知识面,在后面的时间里经常有人问我为什么不使用多 Retrofit 实例的方案,多个 Retrofit 实例看起来并不会占用多少资源啊?

在回答之前为了让看这篇文章的人能了解我在说什么,所以我再粘贴下 上篇文章 中关于这个方案的部分描述

民间常用解决方案:
之前也看过很多开源的聚合类 App 源码, 像一些整合 知乎、 豆瓣、 Gank 等多个平台数据的 App, 因为各自平台的域名不同, 所以大多数这类 App 会给每个平台都各自创建一个 Retrofit 对象, 即不同的 BaseUrl 使用不同的 Retrofit 对象来创建 ApiService 进行请求, 这样只要新增一个不同的 BaseUrl, 那就需要重新创建一个新的 Retrofit 对象

我在这篇文章中重新回答下这个问题,为每个不同的 BaseUrl 都创建一个其他配置属性都一模一样的 Retrofit 实例不止会造成资源的浪费,还会造成接口管理成本的增加,这个才是最重要的一点, 举个例

我们平时项目中所有的 ApiService 都是使用同一个 Retrofit 实例的 Retrofit#create(ApiService) 方法进行实例化后开始接口的请求

但是当项目中出现多个 Retrofit 实例后,我们在开发中不光要区分哪些接口使用哪个 ApiService,还要区分哪些 ApiService 需要使用哪个 Retrofit 实例进行实例化,如果 ApiService 使用错误的 Retrofit 实例进行实例化,那这个 ApiService 的所有接口请求都注定完全失败

越复杂的项目,开发人数越多的项目,出错的风险就越大,并且扩展性也在大打折扣,后面一有变更将会十分痛苦,随着项目中接口的增加,以及 Retrofit 实例的增加 (BaseUrl 的增加),这个管理成本会成几何倍的增加

使用多 Retrofit 实例的方案前期投入成本过高,可能会影响之前项目管理接口的方式,某些封装过 Retrofit 的项目,也可能需要大改,对于老项目的接入不利,而使用 RetrofitUrlManager 不仅

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值