java - 使用 URL 字符串进行 API 调用的更好方法

标签 java android kotlin retrofit

我们与同事进行了讨论,但没有达成共识。 我将感谢您的精彩论据和真实的使用体验。

问题是:

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

  1. 对 URL 中的所有路径项使用单独文件中的静态字符串常量。
    @GET("$VIDEOS/$PUBLIC/{$SLUG}")
    fun getVideos(@Path(SLUG) slug: String, @Query(LIMIT) limit: Int): List<Video>
  • 使用常规字符串。
  •     @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,因为一旦这样做,更改和维护就会变得更加困难。

    当有疑问时,我也会求助于库本身的示例。 Retrofit Docs这里的例子没有任何常数。

    关于java - 使用 URL 字符串进行 API 调用的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58553745/

    相关文章:

    java - 在 Ubuntu Natty 上静态链接 GCJ 应用程序

    android - Android kotlin方法接受任何对象类型作为参数

    android - 减小从 android 中的相机捕获的图像的大小

    java - 带有客户端证书的 Android Http 请求

    inputstream - 在 Kotlin 中,如何将 InputStream 的全部内容读入字符串?

    java - Tomcat-KeyCloak : FAIL -Deployed application at context path but context failed to start

    java - 获取文件最后一次使用的时间

    java - HTTPServletResponse 和 ResponseEntity(Spring) 之间的区别?

    reflection - kotlin反射获取字段列表

    javascript - 如何在 Kotlin/JavaScript 中制作按钮点击监听器事件?