-
Notifications
You must be signed in to change notification settings - Fork 1
Sync Async
readeyKim edited this page Aug 14, 2019
·
1 revision
HCL은 통신 방식으로 동기 방식과 비동기 방식을 모두 지원합니다.
통신 방식은 CallTask 객체가 제공하는 메소드를 통해 선택할 수 있습니다.
동기 방식의 통신은 CallTask 객체의 execute() 메소드를 통해 이루어집니다.
Response<T> execute() throws IOException;
- 동기 방식의 요청을 수행하는 메소드입니다.
- IOException이 발생할 수 있습니다.
- 리턴 타입은 HCL에서 정의한 Response<T> 객체입니다. 이때 T 타입은 CallTask<T>의 T 타입과 동일합니다.
- Response 객체는 다음과 같은 메소드를 제공합니다.
public final class Response<T> {
// name에 해당하는 헤더 값을 반환합니다. 없을 경우 null을 반환합니다.
public String header(String name) {...}
// name에 해당하는 헤더 값을 반환합니다. 없을 경우 파라미터로 입력 받은 defaultValue를 반환합니다.
public String header(String name, String defaultValue) {...}
// name에 해당하는 헤더 값을 모두 반환합니다.
public List<String> headers(String name) {...}
// Http Response Body를 T의 형태로 Converting 하여 반환합니다.
// HEAD Http Method의 경우 null을 반환합니다.
public T body() throws IOException {...}
// Http 응답 코드를 반환합니다.
public int code() {...}
// 응답 수신에 대한 성공 여부를 반환합니다.
public boolean isSuccessful() {...}
// 리다이렉션 여부를 반환합니다.
public boolean isRedirect() {...}
// Response 객체에 대한 해제를 제공합니다.
public void close() {...}
}
비동기 방식의 통신은 CallTask 객체의 enqueue() 메소드를 통해 이루어집니다.
void enqueue(CallBack callback);
- 비동기 방식의 요청을 수행하는 메소드입니다.
- 사용자는 HCL에서 정의한 CallBack 인터페이스를 구현하여 파라미터로 넘겨줘야 합니다.
- CallBack 인터페이스의 형태는 다음과 같습니다.
public interface CallBack {
// 응답에 성공했을 경우 호출되는 콜백 메소드입니다.
void onResponse(Response<?> response) throws IOException;
// 응답에 실패했을 경우 호출되는 콜백 메소드입니다.
void onFailure(IOException e);
}
비동기 방식의 요청은 JAVA에서 제공하는 ExecutorService를 통해 ThreadPool로 관리 되며, 사용자는 원하는 ExecutorService 구현 객체를 사용할 수 있습니다.
만약 변경을 원한다면 HttpClient 객체 생성 단계에서 HttpClient.Builder().executorService()
를 통해 변경할 수 있습니다.
별도의 설정이 없을 경우 기본 값은 Executors.newCachedThreadPool()를 통해 생성됩니다.