原文:一種針對(duì) Android 和 Java 的類(lèi)型安全的 HTTP 代理
簡(jiǎn)介
Retrofit 可以將 HTTP API 轉(zhuǎn)換為 Java 接口。
public interface GithubService{
@GET("/user/{user}/repos")
Call<List<Repo> listRepos(@Path("user") String user);
}
Retrofit 類(lèi)生成 GitHubService 接口的實(shí)現(xiàn)。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();
GitHubService service = retrofit.create(GitHubService.class);
每個(gè) GitHubService 的 Call 方法能進(jìn)行一個(gè)到遠(yuǎn)程服務(wù)器的同步或異步的 HTTP 請(qǐng)求。
Call<List<Repo>> repos = service.listRepos("octocat");
使用注解來(lái)描述 HTTP 請(qǐng)求:
- URL 參數(shù)替代和查詢(xún)參數(shù)的支持
- 將對(duì)象轉(zhuǎn)換為請(qǐng)求體(例如:JSON,協(xié)議緩沖等)
- 多部分的請(qǐng)求體和文件上傳
注釋?zhuān)哼@個(gè)網(wǎng)頁(yè)仍然為了新的2.0的API在擴(kuò)展。
API 聲明
接口和其參數(shù)上的注解表明了這個(gè)請(qǐng)求將被如何處理。
請(qǐng)求方法
每個(gè)方法都必須有一個(gè) HTTP 注解用來(lái)定義請(qǐng)求方法和相關(guān)的 URL。共有五種內(nèi)置的注解:GET、POST、PUT、DELETE,和 HEAD。相關(guān)的 URL 資源定義在注解內(nèi)。
@GET("/user/list")
你也可以在 URL 中定義查詢(xún)參數(shù)。
@GET("/user/list?sort=desc")
URL 處理
請(qǐng)求 URL 可以通過(guò)使用方法中的替換區(qū)塊和參數(shù)來(lái)動(dòng)態(tài)更改。替換區(qū)塊是指被 { 和 } 包圍的字母數(shù)字串。合適的參數(shù)必須以相同的字符串的@Path 注解來(lái)標(biāo)識(shí)。
@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId);
也可以添加查詢(xún)參數(shù)。
@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId, @Query("sort") String sort);
對(duì)于復(fù)雜的查詢(xún)條件可以使用 Map。
@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
請(qǐng)求體
通過(guò) @Body 注解來(lái)聲明一個(gè)對(duì)象可以用作 HTTP 請(qǐng)求體。
@POST("/users/new")
Call<User> createUser(@Body User user);
該對(duì)象會(huì)被定義在 Retrofit 實(shí)例中的轉(zhuǎn)換器轉(zhuǎn)換。如果沒(méi)有已添加的轉(zhuǎn)換器,那么只有 RequestBody 可以被用于請(qǐng)求體。
實(shí)在翻譯不下來(lái)了,以后再?lài)L試吧。
初次翻譯,好難。