为API调用使用URL字符串的更好方法



我们与同事进行了讨论,但没有达成共识。我将感谢这些好的论据和真正的使用经验。

问题是:

声明URL路径的更好方法是什么,例如在带有Reform的Android应用程序中?

  1. 对URL中的所有路径项使用来自单独文件的静态字符串常量
@GET("$VIDEOS/$PUBLIC/{$SLUG}")
fun getVideos(@Path(SLUG) slug: String, @Query(LIMIT) limit: Int): List<Video>
  1. 使用常规字符串
@GET("videos/public/{slug}")
fun getVideos(@Path("slug") slug: String, @Query("limit") limit: Int): List<Video>

如果在代码库的不同区域中使用初始字符串,例如,如果您有两个具有相同$VIDEOS路径的不同URL,则常量可能非常强大,因为您可以一次编辑所有这些。然而,仅仅因为常量"可能"在不同的地方使用而创建常量可能是一场维护噩梦。例如,如上所述,两个API使用$VIDEOS路径,但只有一个更改。

然而,另一方面,在这里使用也有好处,那就是slug,来自您的示例,但经过了编辑。

private const val SLUG = "thing"
@GET("videos/public/{$SLUG}")
fun getVideos(@Path($SLUG) slug: String, @Query("limit") limit: Int): List<Video>

因为这在同一个API调用中使用,但在两个区域内。主要的一点是,你可以将事物移动到常量中,但前提是它有意义。尽量不要抽象掉整个API,因为当你这样做时,更改和维护将更加困难。

当我有疑问时,我也会回到图书馆里的例子本身。改装文档这里的示例没有任何常量。

使用第二种方法,代码变得更可读——这是一个非常重要的优势。

第一种方法的优点是,如果路径的某一部分发生了更改,则只能在一个地方进行更改。但这是一个可疑的优势,因为这条路很少改变,而且第二种选择也不需要太多时间。

第二种方法的缺点:

  • 创建了需要跟踪的附加依赖项,您可能会错误地更改一些不需要的内容
  • 您必须检查每个常量中的内容,以确保路径是正确的

因此,答案是选项2(常规字符串(更好

相关内容

最新更新