5-2 API를 작성하는 다양한 방법[Spring Boot]

JuJaeng2·2023년 12월 3일

이전 글이 길어져서 나머지 PUT, DELETE 방식에 대해 진행해 보겠다.

✅ PUT API

PUT API란?

  • 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이터하는 데 사용한다.
  • 서비스 로직 부분에서는 차이가 있지만 POST API와 컨트롤러 구현에서는 방법이 거의 동일하다.

PUT API 만들기

  • POST API에서와 동일하게 리소스 값을 HTTP body에 담아 서버에 전달한다.

이번에는 DTO를 사용해서 매핑을 해주었다. 또한 반환되는 데이터 타입도 DTO로 설정해주었다.

요청은형식과 요청 주소를 변경해 주었다. 나머지는 동일하다.

요청 후 받은 데이터를 보면 JSON형식으로 받은것을 볼 수 있다. Headers에 응답으로 온 데이터의 Content-Type이 application/json으로 온것을 볼 수 있다.
컨트롤러에서 MemberDto를 반환 타입으로 설정했는데 왜 JSON 값이 응답으로 갔을까❓❓

  • 컨트롤러에 설정한 @RestController 어노테이션 때문이다.
  • @RestController 어노테이션이 지정된 클래스는 @ResponseBody를 생략할 수있다. 이 어노테이션은 자동으로 값을 JSON과 같은 형식으로 변환해서 전달하는 역할을 수행한다. 그래서 MemberDto를 JSON형식으로 자동 변환해 응답을 준것이다.

ResponseEntity를 활용한 응답

지금까지 Postman으로 요청을 주고 응답을 받은 것은 응답이 잘 전달되었을 때 응답코드를 200으로 주었다. ResponseEntity로 이 값을 바꿀 수 있다.

스프링 프레임워크에는 HttpEntity라는 클래스가 있는데 이 클래스는 Header와 Body로 구성된 HTTP요청과 응답을 구성하는 역할을 한다.

ResponseEntity는 HttpEntity를 상속받다 구현한 클래스이다. 이를통해 Header와 Body를 쉽게 구성할 수 있다.

위 사진처럼 응답 코드가 200에서 202로 바뀐것을 확인할 수 있다.


✅ DELETE API

DELETE API란?

  • 데이터베이스 등의 저장소에 있는 리소스를 삭제할 때 사용
  • 데이터베이스나 캐시에 있는 리소스를 조회하고 삭제하는 역할 수행
  • GET API처럼 URI에 값을 넣어 요청을 받는 형식으로 구현된다.

DELETE API 만들기

  • POST API에서는 저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달한다.
  • 그래서 URI가 GET API에 비해 간단한다.

GET API와 동일하게 @PathVariable을 사용하거나 @RequestParam을 사용한다. GET과 방법은 동일하므로 나머지결과는 생략하도록 하겠다.


✅ REST API 명세 문서화-Swagger

명세란 해당 API가 어떤 로직을 수행하는지 설명하고 이 로직을 수행하기 위해 어떤 값을 요청하며, 이에 따른 응답값으로 무엇을 받을 수 있는지를 정리한 자료이다.

build.gradle에 다음 의존성을 추가해준다.


implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")

"localhost:8080/swagger-ui/indelx.html"으로 이동하면 다음과 같은 화면이 나온다.

spring-boot 2.x 버전에서는 springfox-swagger를 지원했지만 3.x 버전부터는 아직 지원하지 않아서 springdoc을 사요하였다.

  • API는 개발 과정에서 계속 변경되므로 작성한 명세 문서도 주기적인 업테이가 필요한데 이 작업이 번거롭고 시간도 오래 걸려 Swagger를 사용한다.

🧐 마무리

이번에는 기본적인 API를 작성해 보는 시간을 가져보았다. @RestController를 왜 사용하는지 모르고 사용을 해왔는데 이번에 다시 공부하며 Controllerd와 ResponseBody가 합쳐진 형태라는 것을 알게 되었다.
지금까지 작성된 코드들이 이유도 모른채 사용되어 왔다는 것을 알게되서 앞으로는 작동원리나 사요된 이유들을 함께 공부하며 나가야할것 같다.

profile
다 잘하고 싶은 개발자

0개의 댓글