Introduction
Retrofit 把你的Http API转化为Java的接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit类生成一个GitHubService接口的实现对象:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
生成的GitHubService对象,产生的每个Call对象都可以向远程服务器发送一个同步的或者异步的Http请求
Call<List<Repo>> repos = service.listRepos("octocat");
使用注释来描述HTTP请求:
- 支持替换URL参数和查询参数
- 请求体直接转换为对象
- Multipart request body and 文件上传
API 的声明
对一个接口方法添加注释,它的参数表示了这个请求是怎么处理的
请求方法
每个方法必须有一个HTTP注释,诸葛注释提供了具体的请求方式和相关的URL.
默认提供了五中内置的注释:++GET++, ++POST++, ++PUT++, ++DELETE++, and ++HEAD++.资源的相关URL要在注释中指定
@GET("users/list")
你也可以在URL中指定查询参数:
@GET("users/list?sort=desc")
更改URL
一个请求的URL可以被动态的更改,在方法中使用一个占位符和参数即可.一个占位符必须使用{}包裹一个英文字符串的形式.相对应的参数要使用@Path注释来修饰,并指定相同的英文字符串
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
同时也可以添加查询参数:
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
如果是个复杂的查询组合,可以使用一个Map来添加查询参数:
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
请求体
一个使用@Body注释修饰的对象可以表示为一个HTTP的请求体
@POST("users/new")
Call<User> createUser(@Body User user);
使用Retrofit的实例,转化器(converter)会把HTTP请求体转化成这个对象,如果没有转化器(converter)则只有RequestBody可以使用
form encoded 和 multipart
方法可以被声明来发送form encoded 和 multipart数据
当使用@FormUrlEncoded注释标记方法的时候将会发送Form-encoded数据.
@Field包含了键的名字,修饰的对象则是对应的值,每个@Field都是一个键值对:
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
网友评论