Developer Geek

Retrofit2 in Java 본문

안드로이드/Network

Retrofit2 in Java

devGeek 2022. 5. 29. 08:59
반응형

Retrofit2

개요

  • 모바일에서 HTTP API 통신을 할 때 사용하는 라이브러리이다.
  • REST 기반의 웹서비스를 통해 JSON 구조를 쉽게 가져오고 업로드할 수 있다.

HTTP API를 Interface로 구현할 수 있다.

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

Retrofit class는 위에서 정의한 GitHubService Interface의 구현체를 생성한다.

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

각각의 GitHubService에서 만들어진 Call은 동기적 또는 비동기적으로 HTTP request를 해당 웹 서버에 요청할 수 있다.

Call<List<Repo>> repos = service.listRepos("octocat");

HTTP request 를 명시적으로 사용하기 위해서 annotation을 사용한다.

  • URL parameter replacement and query parameter support
  • Object conversion to request body (e.g., JSON, protocol buffers)
  • Multipart request body and file upload

API 정의

함수 위에 있는 Anotation 그리고 Parameter는 HTTP request가 어떤 방식으로 요청 처리 되는지를 잘 명시한다.

REQUEST METHOD

 

  • 모든 함수는 ``HTTP annotation``과 ``상대적인 URL`` 정보를 가지고 있어야한다.
  • Retrofit에서는 8가지의 ``annotation``을 제공한다.

 

<li>{``HTTP``,  ``GET``, ``POST``, ``PUT``, ``PATCH``, ``DELETE``, ``OPTIONS``, ``HEAD``}</li>

``` java
@GET("users/list")
```

 

  • ``query parameter``들을 URL에 추가할 수 있다.

 

``` java
@GET("users/list?sort=desc")
``` 

URL MANIPULATION

Request URL은 함수의 파라미터를 통해 동적으로 바뀌는 값을 사용하기도 한다. URL에 표기할 때에는 { } 중괄호를 사용한다. 그리고 함수의 파라미터에서는 @Path("") annotation을 사용한다.

Path Param

@GET("group/{id}/users")
Call<List<User>> groupList(
    @Path("id") int groupId
);

Query Param

Query Parameters도 Request에 추가할 수 있다. @Query("") annotation을 사용한다.

@GET("group/{id}/users")
Call<List<User>> groupList(
    @Path("id") int groupId,
    @Query("sort") String sort
);

Complex Query Param - Map

@GET("group/{id}/users")
Call<List<User>> groupList(
    @Path("id") int groupId,
    @QueryMap Map<String, String> options
);

REQUEST BODY

객체를 HTTP request body로 사용되기 위해 @Body annotation을 이용하여 body를 추가할 수 있다.

@POST("users/new")
CALL<User> craeteUser(
    @Body User user
);

User user 객체는 Retrofit 객체로 변환되다.

FORM ENCODED AND MULTIPART

Form-encoded 데이터는 FormUrlEncoded annotation을 이용해서 함수에 추가할 수 있다.
각 각의 key-value@Field를 사용하면 된다.

@FormUrlIncoded
@POST("user/edit")
Call<User> updateUser(
    @Field("first_name") String first,
    @Field("last_name") String last
);

Multipart request@Multipart를 명시한 후, @Part annotation을 이용하여 파라미터를 정의해주면 된다.

@Multipart
@PUT("user/photo")
Call<User> updateUser(
    @Part("photo") RequestBody photo,
    @Part("description) RequestBody description)
);

Multipart를 사용할 때는 Retrofit 자체 converter를 이용하거나 자체적으로 구현한 RequestBody를 이용해 Serialization을 다룬다.

반응형
Comments