如何使用Retrofit模拟复杂的(URL)API

时间:2018-10-13 13:36:40

标签: android api retrofit okhttp moshi

我需要按照此网站的说明进行操作:https://blog.davidmedenjak.com/android/2016/11/22/mocking-api-calls.html 1

我需要使用一些json文件在某种风格上模拟我的API,以实现自己的OkHttp拦截器。我可以使用简单的url来做到这一点,但是如果url更复杂,该如何做呢?例如:

  

/ hello / world / {myName} / {mySurname}

在我的自定义拦截器中,URL已经被“编译”了,但是我需要根据它们的文件名读取json文件,因此需要{myName}和{mySurname}作为字符串。我想我应该阅读url的注释,但是找不到任何示例。

我的源代码类似于上述网站,我有我的API.kt:

internal interface API {
    @GET("hello/world/{myName}/{mySurname}")
    fun hello(
        @Path(value = "myName") name: String,
        @Path(value = "mySurname") surname: String
    ): Observable...
}

和我实现自定义拦截器的ServiceFactory.kt:

val httpClient = OkHttpClient.Builder()
httpClient.interceptors().add(Interceptor { chain ->
    // here I have my request and response
    // here the request URL is already compiled, for example: /hello/world/steve/jobs
})

所以我认为我应该阅读实现我自己的 ConverterFactory 的url批注:

retrofit
    .client(httpClient.build())
    .addConverterFactory(MoshiConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .build()
    .create<API>(API::class.java)

感谢您的帮助!谢谢大家!

1 个答案:

答案 0 :(得分:0)

如果您可以提供有关您要确切执行的操作的更多信息,这将有所帮助。据我了解,您不需要仅用于测试的自定义拦截器。您可以使用MockWebServer,按顺序排队请求并按顺序测试响应。 MockWebServer有一个takeRequest()方法,您可以使用该方法声明标头,URL,请求参数等。

文档可在此处找到:https://github.com/square/okhttp/tree/master/mockwebserver