Spring Boot (2) 기본 API 만드는 방법

넙데데맨·2022년 7월 14일
0

프로젝트 예제

GET API 만들기

1. RequestMapping GET

@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
   @RequestMapping(value = "/hello", method = RequestMethod.GET) / /GET 요청만 받을 수 있게 설정
    public String getHello(){
       return "Hello World";
   }
}

@RequestMapping을 클래스에 걸어줄 시 하위 메소드에 자동으로 포함된다!

2. 매개변수 없는 GET

    @GetMapping(value = "/name")
    public String getName() {
        return "Flature";
    }

3. @PathVariable GET

URI에 값을 담아 요청할 때 사용한다. 어디에서 값을 받아올 것인지 중괄호로 표시해야한다.

    @GetMapping(value = "/variable1/{variable}")
    public String getVariable1(@PathVariable String variable) {
        return variable;
    }

    @GetMapping(value = "/variable2/{variable}")
    public String getVariable2(@PathVariable("variable") String var) {
        return var;
    }

getVariable1 메소드는 {variable} 부분과 변수 부분의 이름이 같아야한다.
getVariable2 메소드는 {variable} 부분을 @PathVariable에서 받고 변수의 이름은 따로 설정이 가능하다.

4. @RequestParam GET

쿼리스트링 형태로 값을 전달할 때 @RequestParam을 사용한다.

@GetMapping(value = "/request1")
    public String getRP1(
            @RequestParam String name,
            @RequestParam String email,
            @RequestParam String organization) {
        return name + " " + email + " " + organization;
    }

받아올 매개변수가 명확할 때 사용한다.

    @GetMapping(value = "/request2")
    public String getRP2(
            @RequestParam Map<String,String> param) {
        StringBuilder sb = new StringBuilder();
        param.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "/n");
        });
        return sb.toString();
    }

매개변수가 뭐가 들어올 지 모를 때 Map을 사용한다.
Map.entrySet() : Map 전체를 순회하는 메서드로 키, 값이 모두 필요할 때 사용한다.

5. DTO 객체 활용한 GET

DTO : 다른 레이어 간 데이터 교환에 활용되는 데이터 객체

    @GetMapping(value="/request3")
    public String getRP3(MemberDto memberDto){
        return memberDto.toString();
    }

쿼리스트링의 키가 정해져있지만 파라미터가 많을 시 가독성을 높힐 수 있다

POST API 만들기

POST 형식 요청은 클라이언트 서버에 리소스를 저장하는 데 사용하며 이때 HTTP BODY에 값을 넣어 전송한다.
보통 JSON 형식으로 전송되며 Talend에서도 이를 지원하기 위해 BODY에 값 입력이 가능하다.

1. RequestMapping POST

GET 매핑과 동일하게 사용된다.

2. RequestBody POST

@PostMapping(value = "/member")
    public String postMember(
            @RequestBody Map<String,Object> postData) {
        StringBuilder sb = new StringBuilder();
        postData.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "/n");
        });
        return sb.toString();
    }

3. DTO POST

GET 매핑과 동리하게 사용된다.

PUT API 만들기

웹 애플리케이션 서버를 통해 DB 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용한다. HTTP BODY를 사용해 서버에 전달하기 때문에 POST API와 비슷하다.

1. RequestBody PUT

POST API처럼 RequestBody를 사용한다.

@PutMapping(value = "/member")
    public String postMember(
            @RequestBody Map<String,Object> putData) {
        StringBuilder sb = new StringBuilder();
        putData.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "/n");
        });
        return sb.toString();
    }
	@PutMapping(value="/member1")
    public String postMemberDto1(@RequestBody MemberDto memberDto){
        return memberDto.toString();
    }

    @PutMapping(value="/member2")
    public MemberDto postMemberDto2(@RequestBody MemberDto memberDto){
        return memberDto;
    }

postMemberDto1 postMemberDto2는 리턴 타입이 다른데 아래와 같이 Dto 타입으로 리턴해 줄 때는 JSON 형식으로 전달된 것을 확인할 수 있따.

postMemberDto1

postMemberDto2

2. ResponseEntity PUT

  • HttpEntity 클래스는 Header와 Body로 구성된 HTTP 요청, 응답을 구성하는 역할을 수행
  • RequestEntity, ResponseEntityHttpEntity를 상속받은 클래스
  • ResponseEntity는 Header와 Body를 가지고 자체적으로 HttpStatus를 구현하며 응답코드 변경 및 Header와 Body를 쉽게 구성할 수 있다
	@PutMapping(value="/member3")
    public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto){
        return ResponseEntity
                .status(HttpStatus.ACCEPTED)
                .body(memberDto);
    }

DELETE API 만들기

리소스를 식별할 수 있는 값을 받아 리소스를 조회하고 삭제하는 역할을 수행하기 때문에 GET 메서드처럼 URI에 값을 넣어 요청 받는 형식으로 구현된다.

Swagger, Logback

Swagger

API 개발 시 명세를 도와주는 오픈소스 프로젝트로 해당 API와 매개변수에 대한 설명을 추가해 확인할 수 있다.

Logback

logging : 애플리케이션이 동작하는 동안 상태, 동작 정보를 시간 순으로 기록하는 것을 의미
Logback은 로깅 프레임워크로 로깅 레벨 및 로그의 형태를 설정, 출력하는 방법에 대해 설정할 수 있다.

알게된 점

  • @RequestMapping을 클래스에 걸어줄 시 하위 메소드에 자동으로 포함된다!
  • 메소드에 @RequestMapping을 사용해 일일히 method를 설정할 필요 없이 해당 요청에 맞는 Mapping 어노테이션을 사용해주면 편하다.
  • 향상된 for문
  • DTO와 VO는 차이가 있다! DTO는 단순 데이터 교환용 VO는 그 자체로 의미 있는 데이터
  • URI가 URL의 상위 개념이다. 자원의 위치를 가리키는 URL 어떤 자원을 얻을지는 URI!
    ex : /test /test/102
    /test라는 곳을 가리키지만 /102 부분이 없다면 무슨 자원을 얻을지 알 수 없다
profile
차근차근

0개의 댓글