2. Spring Android RestTemplate Module

2.1 Introduction

스프링의 레스트템플릿(RestTemplate)은 강력하고 인기있는 자바 기반 REST 클라이언트 입니다. 스프링 안드로이드 레스트템플릿 모듈은 안드로이드 환경에서 작동하는 RestTemplate 버전을 제공합니다.

2.2 Overview

레스트템플릿 클래스는 스프링 안드로이드 레스트템플릿 라이브러리의 심장입니다. 그것은 다른 스프링 포트폴리오 프로젝트에 있는 다른 템플릿 클래스에서 찾을 수 있는 개념과 유사합니다. 레스트템플릿의 동작은 콜백 메소드를 제공하고 Http 본문에서 오브젝트를 마샬하고 응답뒤에  오브젝트에서 언마샬 하는데 사용되는 HttpMessageConverter를 구성하여 사용자 정의됩니다. 

2.2.1 HTTP Client

레스트템플릿은 RESTful HTTP 요청을 만들기 위한 추상화를 제공하며, 내부적으로, 레스트템플릿은 이런 요청들에서 네이티브 안드로이드 HTTP 클라이언트 라이브러리를 활용합니다. HttpComponents HttpClient는 안드로이드 플랫폼에서 사용할 수 있는 기본 HTTP 클라이언트입니다. 스프링 안드로이드 레스트템플릿 안에서 HttpClient는 HttpComponentsClientHttpRequestFactory를 통해 사용할 수 있도록 만들어졌습니다. 당신이 새로운 레스트템플릿 인스턴스를 만들때 이 클래스는 기본 ClientHttpRequestFactory로 설정됩니다. 표준 J2SE 시설 또한 네이티브 안드로이드 라이브러리로서 사용할 수 있으며, SimpleClientHttpRequestFactory를 통해 이용할 수 있습니다. SimpleClientHttpRequestFactory를 활용하려면 레스트템플렛 생성자에 새로운 인스턴스 하나를 전달하거나, 이미 존재하는 레스트템플릿 인스턴스에서 setRequestFactory(ClientRequestFactory requestFactory)를 호출해야합니다. 

2.2.2 Gzip Compression

레스트템프릿은 인코딩된 데이터를 보내고 받는데에 gzip 압축을 지원합니다. HTTP 사양은 Accept-Encoding 헤더 필드 추가값들을 허용하지만 레스트템플릿은 현재 gzip 압축만을 지원합니다.

2.2.3 Object to JSON Marshaling

스프링 안드로이드 레스트템플릿에서 오브젝트를 JSON으로 마샬링할때에는 서드파티 JSON 매핑 라이브러리를 사용해야 합니다. 스프링 안드로이드에서 Jackson JSON ProcessorGoogle Gson, 두가지 라이브러리가 지원되고 있습니다. Jackson-JSON 파싱 라이브러리로 잘 알려진-에 비하여, Gson 라이브러리는 더 작아서, 소규모 안드로이드 앱에서 패키지 될 때 더 작습니다.

2.2.4 Object to XML Marshaling

스프링 안드로이드 레스트 템플릿에서 오브젝트를 XML로 마샬링할때에는 서드파티 XML 매핑 라이브러리를 사용해야 합니다. 심플 XML 시리얼라이저가 마샬링 기능을 제공하는데 사용되고 있습니다.

2.2.5 RSS and Atom support

스프링 안드로이드 레스트템플릿에서 RSS와 Atom 피드 지원은 서드파티 피드 리더 라이브러리(Third party feed reader library)를 사용해야 합니다. 안드로이드 ROME 피드 리더는 이런 기능을 제공하는데 사용되고 있습니다.

2.3 RestTemplate Methods

레스트템플릿은 여섯가지 메인 HTTP 메소드 각각에 부합하는 하이 레벨 메소드들을 제공합니다. 이러한 메소드들은 많은 레스트풀 서비스들을 호출하는 것과 레스트 적용의 모범사례를 쉽게 만듭니다.

레스트템플릿 메소드의 이름은 네이밍 컨벤션을 따라, 첫번째 부분은 어떤 HTTP 메소드가 호출되었는지를 의미하고, 두번째 부분은 반환되는 것을 나타냅니다. 예를 들어, getForObject() 메소드는 GET을 수행하고, HTTP 응답을 원하는 Object 타입으로 변환하여 해당 오브젝트를 반환합니다. postForLocation() 메소드는 POST를 수행하고 주어진 오브젝트를 HTTP 요청으로 변환하고, 새로 만들어진 찾을 수 있는 오브젝트에 HTTP Location 헤더 응답을 반환합니다. HTTP 요청 처리 중 예외(exception)가 있는 경우, RestClientException 타입의 예외가 발생한것입니다. 이 문제는 레스트템플릿에 다른 ResponseErrorHandler 구현을 넣음으로써 변경할 수 있습니다.

레스트템플릿과 연관되는 메소드들에 대한 더 많은 정보는 API Javadoc을 참고하시기바랍니다.

2.3.1 HTTP DELETE 
public void delete(String url, Object... urlVariables) throws RestClientException;

public
void delete(String url, Map<String, ?> urlVariables) throws RestClientException;
public void delete(URI url) throws RestClientException;

2.3.2 HTTP GET
public <T> T getForObject(String url, Class<T> responseType, Object... urlVariables) 
 
throws RestClientException;
public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> urlVariables)
 
throws RestClientException;
public
<T> T getForObject(URI url, Class<T> responseType)
 
throws RestClientException;
public
<T> ResponseEntity<T> getForEntity(
String url,
Class<T> responseType, Object... urlVariables);
public
<T> ResponseEntity<T> getForEntity(
String url, Class<T> responseType,
Map<String, ?> urlVariables);
public
<T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType)
throws RestClientException;

2.3.3 HTTP HEAD
public HttpHeaders headForHeaders(String url, Object... urlVariables)
throws RestClientException;
public
HttpHeaders headForHeaders(String url, Map<String, ?> urlVariables)
throws RestClientException;
public
HttpHeaders headForHeaders(URI url) throws RestClientException;

2.3.4 HTTP OPTIONS
public Set<HttpMethod> optionsForAllow(String url, Object... urlVariables)
throws RestClientException;
public
Set<HttpMethod> optionsForAllow(String url, Map<String, ?> urlVariables)
throws RestClientException;
public
Set<HttpMethod> optionsForAllow(URI url) throws RestClientException;

2.3.5 HTTP POST
public URI postForLocation(String url, Object request, Object... urlVariables)
throws RestClientException;
public URI postForLocation(String url, Object request, Map<String, ?> urlVariables);
public
URI postForLocation(URI url, Object request)
throws RestClientException;
public
<T> T postForObject(
String url, Object request, Class<T> responseType, Object... uriVariables);

public
<T> T postForObject(
String url, Object request, Class<T> responseType, Map<String, ?> uriVariables);

public
<T> T postForObject(URI url, Object request, Class<T> responseType)
throws RestClientException;
public
<T> ResponseEntity<T> postForEntity(
String url, Object request, Class<T> responseType, Object... uriVariables);

public
<T> ResponseEntity<T> postForEntity(
String url, Object request, Class<T> responseType, Map<String, ?> uriVariables)
throws RestClientException;
public
<T> ResponseEntity<T> postForEntity(
URI url, Object request, Class<T> responseType)
throws RestClientException;

2.3.6 HTTP PUT
public void put(String url, Object request, Object... urlVariables) throws RestClientException;

public void put(String url, Object request, Map<String, ?> urlVariables) throws RestClientException;

public void put(String url, Object request, Map<String, ?> urlVariables) throws RestClientException;






이전글 - [Spring Android] 1. Spring Android Overview



Posted by croute

댓글을 달아 주세요