用于Java和Android应用的类型安全REST客户端:Retrofit
jopen
10年前
Retrofit将你的REST API变为Java接口,Retrofit把REST API返回的数据转化为Java对象方便操作,对于在项目中组织API调用,是一个不错的解决方案。其请求方法和相对URL都带有注解,使得代码变得更加简洁。使用注解,你可以很容易的添加一个请求主体,操纵URL或头文件,并添加查询参数。除此之外,每个函数可以定义为同步或异步,具有返回值的函数为同步执行,而异步函数没有返回值且最后一个参数为Callback对象。
public interface RetrofitInterface { // asynchronously with a callback @GET("/api/user") User getUser(@Query("user_id") int userId, Callback<User> callback); // synchronously @POST("/api/user/register") User registerUser(@Body User user); } // example RetrofitInterface retrofitInterface = new RestAdapter.Builder() .setServer(API.API_URL).build().create(RetrofitInterface.class); // fetch user with id 2048 retrofitInterface.getUser(2048, new Callback<User>() { @Override public void success(User user, Response response) { } @Override public void failure(RetrofitError retrofitError) { } });Retrofit默认情况下使用的是GSON,所以无需自定义解析,同时还支持其他转换器。
Retrofit turns your REST API into a Java interface.
public interface GitHubService { @GET("/users/{user}/repos") List<Repo> listRepos(@Path("user") String user); }
The RestAdapter
class generates an implementation of the GitHubService
interface.
RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com") .build(); GitHubService service = restAdapter.create(GitHubService.class);
Each call on the generated GitHubService
makes an HTTP request to the remote webserver.
List<Repo> repos = service.listRepos("octocat");
Use annotations to describe the HTTP request:
- URL parameter replacement and query parameter support
- Object conversion to request body (e.g., JSON, protocol buffers)
- Multipart request body and file upload