android - 如何使用 Retrofit 模拟复杂的(url)API
问题描述
我需要按照本网站的描述做一些事情: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)
任何帮助表示赞赏!多谢你们!
解决方案
如果您可以提供有关您正在尝试做什么的更多背景信息,那将很有帮助。据我了解,您不需要仅用于测试的自定义拦截器。您可以使用MockWebServer
, 按顺序排列请求并按顺序测试响应。MockWebServer
有一种takeRequest()
方法,您可以使用该方法断言标头、URL、请求参数等。
文档可以在这里找到:https ://github.com/square/okhttp/tree/master/mockwebserver
推荐阅读
- reactjs - 如何将 Heroku 部署的 API 添加到 Vercel 图像优化条目
- javascript - 如何在 JavaScript 中使用提示在对象内添加属性?
- azure - Microsoft Graph API - 使用应用程序(守护程序)标识确定委托信息
- angular - 角度谷歌地图的缩放控制属性中出现此错误的原因是什么?
- excel - 引导表导出(excel)给出警告
- python - jnius.jnius.JavaException:发生 JVM 异常:setAudioSource 失败
- stripe-payments - 如何处理不完整的条带连接帐户入职?
- python - 我收到此错误 ValueError: not enough values to unpack (expected 2, got 1)
- c - 试图找到回文年份,我正在反转并将一个 int 切成两半,但只有前半部分会填充
- c++ - Yolov4 onnxruntime C++