Retrofit初探——請求引數
阿新 • • 發佈:2019-02-04
0x00 請求引數
常見的Http請求,除了指定的請求地址,很多時候我們還需要加上一些請求引數,這些引數可能是固定的,也可能是動態新增的。在Retrofit中,我們該如何處理呢?這裡以GET方式中新增請求引數為例。
0x01 固定請求引數
這裡說的固定請求引數是指每次請求我們都在Url中新增相同的請求的引數。這種場景多出現在需要認證的情況,比如新增 Token 欄位等。
在之前的文章中,我們有提到在構建OkHttpClient物件的時候使用過 Interceptor
,在 Interceptor
的邏輯中,我們會重新建立一個 Request
物件,在這個物件中我們可以傳入一個 HttpUrl
Interceptor
瞭解,我們應該知道,這裡做的操作是對所有的請求都有效的。這樣就可以完成我們為每個請求新增固定請求引數的目的。程式碼如下:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request original = chain.request();
HttpUrl originalHttpUrl = original.url();
HttpUrl url = originalHttpUrl
.newBuilder()
.addQueryParameter("token" , "I_am_user_token")
.addQueryParameter("user_key", "I_am_user_user_key")
.build();
Request request = original
.newBuilder()
.url(url)
.build();
okhttp3.Response response = chain.proceed(request);
return response;
}
})
.build();
0x02 動態請求引數
這個指我們在不同的請求中新增不同過的請求引數。比如,在請求使用者資訊的介面中我們可能需要傳入使用者ID,在請求記錄的介面中我們需要傳入起止時間等。由於這樣的引數是針對介面的,因此我們就需要在每一個介面做中處理。
@Query 新增一個請求引數
// http://119.29.29.29/d?dn=ttdevs.vicp.com @GET("/d") public Call<ResponseBody> singleParams(@Query("dn") String domain);
通過上面的方式,我們發出的請求就是:
http://119.29.29.29/d?dn={domain}
@QueryMap 新增一組請求引數
@GET("/record") public Call<ResponseBody> multiParams(@QueryMap(encoded = true) Map<String, String> options);
上面我們發出的請求是:
http://ttdevs.vicp.net/record?p1=v1&p2=v2
這個這個例子中還可以看到,我們使用了一個引數:
encoded = true
,這個引數的意思是,對我們的引數進行URL
Encode。
0x03 總結
通過上面的介紹,我們可以瞭解,如果新增我們的請求引數。當需要給每一個請求都新增相同引數時該如何封裝,把Retrofit打造成更適合我們使用的工具。
—— EOF ——