
생각을 해보자. 내가 특정 API, 예를 들어 chatGPT의 생성형 API를 사용하고 싶다. 사실 API를 사용하고 싶지 않다면 자신이 직접 만들면 된다. chatGPT같은 AI를 개인이 만든다고 생각한다면 아마.. 100년정도 열심히 공부하고 장비를 사면 만들 수 있을 것이다. 하지만, 개인이 만들기는 힘들기 때문에 openAI(마이크로소프트에서 chatGPT API를 제공하는 사이트)를 통해 간단한 API요청을 보내고 응답을 받으면 그만이다. 이때 요청에 사용할 메소드가 RequestEntity이다.
// @RequestEntity 예시
RequestEntity<String> requestEntity = RequestEntity
.post(new URI("https://example.com/api/resource"))
.header("Content-Type", "application/json")
.body("{'key':'value'}");
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
// json형식의 매개변수 message 역직렬화를 통해 String 데이터 타입으로 변환(Object활용)
log.info("content = {}", question); // log찍어보기
// 엔드포인트 uri 지정
String uri = "https://api.openai.com/v1/chat/completions";
// 헤드 작성 + apikey
httpHeaders.add("Authorization", "Bearer " + apikey);
httpHeaders.setContentType(MediaType.APPLICATION_JSON); // json타입으로 데이터를 전달하겠다는 뜻
ArrayList<Message> messages = new ArrayList<>();
messages.add(new Message("user", question));
// 바디 작성 + model + messages
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("model", model);
requestBody.put("messages", messages);
// 요청하고 받기
RequestEntity<Map<String, Object>> httpEntity
= new RequestEntity<>(requestBody, httpHeaders, HttpMethod.POST, URI.create(uri));
굳이 ResponseEntity를 사용하는 이유는 무엇일까? 내가 만약 클라이언트에게 응답값을 보낸다고 했을 때 JSON형식의 값을 줘도 되고 또는 model 객체에 담아서 값을 전해줄 수도 있는데 @ResponseEntity를 사용해서 응답값을 전해줄 필요가 있을까?
ResponseEntity<String> responseEntity = ResponseEntity
.status(HttpStatus.OK)
.header("Custom-Header", "value")
.body("{'message':'success'}");
ResponseEntity<GptApiResponse> exchange
= restTemplate.exchange(httpEntity, GptApiResponse.class);
내가 지금 포스팅한 글이 정설은 아닐 것이다.
RequestEntity와 ResponseEntity는 활용을 어떻게 하냐에 따라서 굉장히 유용 기능이기 때문이다.
앞으로 프로젝트나 프로그래밍을 하면서 내용을 계속 업로드(추가 및 수정)할 예정이다.