用于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


项目主页:http://www.open-open.com/lib/view/home/1403076886247