REST API Web Study 정리

  • Udemy Spring Guru 님의 RESTful Web Services 수업을 듣고 정리한 내용을 추가하고 있습니다.

Postman

  • Postman은 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼이다. 즉 API 를 여기서 호출해보고 결과를 눈으로 확인해 볼 수 있다.
  • 포스트맨 설치 : PostMan 주소
  • 테스트 데이터 : JsonPlaceHolder
  • 결과

상세 사용법 LINK

Create Data Model

  • JSON to POJO Class Converter : jsonchema2pojo 주소
  • User의 JSON 데이터를 입력하고 패키지명과 타입을 설정하면 자동으로 pojo class 내부 데이터까지 자동으로 만들어 준다.

Spring RestTemplate

RestTemplate

  • Spring 3부터 지원, REST API 호출 이후 응답을 받을 때 까지 기다리는 동기 방식
  • Spring 에서 제공하는 HTTP 통신에 유용하게 쓸 수 있는 메서드를 제공하는 템플릿

RestTemplate 동작 원리

  • HttpClient는 HTTP를 사용하여 통신하는 범용 라이브러리
  • RestTemplate는 HttpClient를 추상화(HttpEntity의 json,xml 등)해서 제공
  1. 어플리케이션이 RestTemplate를 생성하고, URI, HTTP 메소드 등의 헤더를 담아 요청

  2. RestTemplate는 HttpMessageConverter를 사용하여 RequestEntity를 요청 메세지로 변환

  3. RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보냄

  4. ClientHttpRequest 는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신

  5. RestTemplate 는 ResponseErrorHandler 로 오류를 확인하고 있다면 처리로직을 태움

  6. ResponseErrorHandler 는 오류가 있다면 ClientHttpResponse 에서 응답데이터를 가져와서 처리

  7. RestTemplate 는 HttpMessageConverter 를 이용해서 응답메세지를 java object(Class responseType) 로 변환

  8. 어플리케이션에 반환


Test Code

@Service
public class ApiServiceImpl implements ApiService {

	private final RestTemplate restTemplate;

	public ApiServiceImpl(RestTemplate restTemplate) {
		this.restTemplate = restTemplate;
	}

	@Override
	public List<User> getUsers(int start, int limit) {
		ResponseEntity<List<User>> response =
						restTemplate.exchange(
										"https://jsonplaceholder.typicode.com/users/?_start=" + start + "&_limit=" + limit,
										HttpMethod.GET,
										null,
										new ParameterizedTypeReference<>() {});
		return response.getBody();
	}
}
	@Test
	void getUsers() {
		List<User> users = apiService.getUsers(0, 3);

		Assertions.assertEquals(3, users.size());
	}

좋은 웹페이지 즐겨찾기