Spring์์ ์ง์ํ๋ ๊ฐ์ฒด๋ก ๊ฐํธํ๊ฒ Rest ๋ฐฉ์ API๋ฅผ ํธ์ถํ ์ ์๋ Spring ๋ด์ฅ ํด๋์ค์ด๋ค.
๐พ Rest API ์๋น์ค๋ฅผ ์์ฒญ ํ ์๋ต๋ฐ์ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ผ๋ฉฐ HTTP ํ๋กํ ์ฝ์ ๋ฉ์๋ (ex.GET, POST, DELETE, PUT)๋ค์ ์ ํฉํ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
Spring 3.0๋ถํฐ ์ง์ํ๋ Spring์ HTTP ํต์ ํ ํ๋ฆฟ
HTTP ์์ฒญ ํ JSON, XML, String๊ณผ ๊ฐ์ ์๋ต์ ๋ฐ์ ์ ์๋ ํ ํ๋ฆฟ
Blocking I/O ๊ธฐ๋ฐ์ ๋๊ธฐ๋ฐฉ์์ ์ฌ์ฉํ๋ ํ ํ๋ฆฟ
RESTful ํ์์ ๋ง์ถ์ด์ง ํ ํ๋ฆฟ
Header, Content-Tpye๋ฑ์ ์ค์ ํ์ฌ ์ธ๋ถ API ํธ์ถ
Server to Server ํต์ ์ ์ฌ์ฉ
์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ REST API์ ์์ฒญํ๊ธฐ ์ํด RestTemplate์ ๋ฉ์ ๋๋ฆด ํธ์ถ ํ๋ค.
RestTemplate์ MessageConverter๋ฅผ ์ด์ฉํด java object๋ฅผ request body์ ๋ด์ message(JSON etc.)๋ก ๋ณํํ๋ค. ๋ฉ์์ง ํํ๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
ClientHttpRequestFactory์์ ClientHttpRequest์ ๋ฐ์์ ์์ฒญ์ ์ ๋ฌํ๋ค.
์ค์ง์ ์ผ๋ก ClientHttpRequest๊ฐ HTTP ํต์ ์ผ๋ก ์์ฒญ์ ์ํํ๋ค.
RestTemplate์ด ์๋ฌํธ๋ค๋ง์ ํ๋ค.
ClientHttpResponse์์ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ์ฒ๋ฆฌํ๋ค.
MessageConverter๋ฅผ ์ด์ฉํด response body์ message๋ฅผ java object๋ก ๋ณํํ๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ ค์ค๋ค.
๋ฉ์๋ | HTTP | ์ค๋ช |
---|---|---|
getForObject : Object | GET | GET ๋ฐฉ์ ์์ฒญ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋ก ๋ฐํ |
getForEntity : ResponseEntity | GET | GET ๋ฐฉ์ ์์ฒญ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ResponseEntity๋ก ๋ฐํ |
postForLocation | POST | POST ๋ฐฉ์ ์์ฒญ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํค๋์ ์ ์ฅ๋ URI๋ก ๋ฐํ |
postForObject : Object | POST | POST ๋ฐฉ์ ์์ฒญ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋ก ๋ฐํ |
postForEntity : ResponseEntity | POST | POST ๋ฐฉ์ ์์ฒญ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ResponseEntity๋ก ๋ฐํ |
delete | DELETE | DELETE ๋ฐฉ์ ์์ฒญ์ผ๋ก ๋ฉ์๋ ์คํ |
headForHeaders | HEADER | ํค๋์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๊ณ , HTTP HEAD ๋ฉ์๋ ์ฌ์ฉ |
put | PUT | HTTP PUT ๋ฉ์๋๋ฅผ ์คํ |
patchForObject | PATCH | HTTP PATCH ๋ฉ์๋๋ฅผ ์คํ |
optionsForAllow | OPTIONS | ์ง์ํ๋ HTTP ๋ฉ์๋ ์กฐํ |
exchange : ResponseEntity | any | ํค๋ ์์ฑ ๋ฐ ์ด๋ค ์์ฒญ์ด๋ ์ฌ์ฉ ๊ฐ๋ฅ |
execute | any | Request/Response ์ฝ๋ฐฑ์ ์์ ํ ์ ์์ |
implementation 'org.apache.httpcomponents:httpcore:4.4.15'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
@PostMapping(path = "/getInfo")
public String getInfo() {
// request url
String url = "";
String jsonData = "{}";
// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));
headers.setContentType(mediaType);
HttpEntity<String> entity = new HttpEntity<>(jsonData, headers);
String response = restTemplate.postForObject(url, entity, String.class);
System.out.println(response);
return response;
}