본문 바로가기
JAVA

[JAVA] RESTful API 구성하기 (1)

by @sseyeon_ 2023. 9. 8.
반응형

[이론]

1. 설계를 위한 controller, service, repository 개념

  • controller, service 패키지 생성 - 서버 처리 과정의 분리
    • controller
    • 클라이언트 요청을 받고 서비스에 처리를 요청, 이후 클라이언트에 응답
    • serviceDB 의 정보 등 필요에 따라 repository에 요청
    • controller의 호출에 따라 사용자의 요구사항을 처리
    • repository
    • 데이터베이스 관련 처리 담당

 

 

2. Annotation

Annotation 설명 비고
@SpringBootApplication 스프링부트 애플리케이션의 시작임을 나타내는 어노테이션  
@Controller HTTP 요청을 처리하는 컨트롤러 클래스를 정의하는 어노테이션 Spring MVC 뷰를 반환하는데 사용됨
@RestController RESTful 웹 서비스를 위한 컨트롤러를 정의하는 어노테이션 RESTful 웹서비스의 JSON, XML 등의 응답을 반환하는데 사용됨
  • @Controller와 @RestController의 차이는?
    • @Controller는 일반적으로 HTTP 요청을 처리하고 뷰를 반환하는데 사용됨
    • @RestController는 HTTP 요청에 대한 RESTful 웹서비스의 JSON, XML 등의 응답을 반환하는데 사용됨

 

 

3. RESTful API 의 행위(Verb) Annotation

Annotation HTTP Method 역할 비고(예시)
@GetMapping GET 리소스 조회 @GetMapping(value=”/users”)
@PostMapping POST 리소스 생성 @PostMapping(value=”/users”)
@PutMapping PUT 리소스 전체 갱신 @PutMapping(value=”/users”)
@PatchMapping PATCH 리소스 일부 갱신 @PatchMapping(value=”/users”)
@DeleteMapping DELETE 리소스 삭제 @DeleteMapping(value=”/users”)
@RequestMapping ALL 요청 메서드(GET~DELETE)와 URL 매핑을 함께 지정 가능 @RequestMapping(value=”/users”, method=RequestMethod.GET)

 

 

4. 데이터 형식 주요 Annotation

Annotation 설명 예시
@PathVariable ‘URL 경로의 일부’를 매개변수로 전달받는 어노테이션 @GetMapping(”/users/{id}”)
public ResponseEntity
getUserById(@PathVariable Long id) { }
@RequestParam ‘URL 요청 파라미터’를 매개변수로 전달받는 어노테이션 @GetMapping(”/users”)
public ResponseEntity<list>
getAllUsers(@RequestParam(”age”) int age) { } </list>
@RequestBody HTTP 요청의 ‘본문(body)’을 매개변수로 전달받는 어노테이션  
@ResponseBody HTTP 응답의 본문(body)을 생성하는 메소드에 적용하는 어노테이션  
@ResponseStatus HTTP 응답의 상태코드를 지정하는 어노테이션  

 

 

5. RESTful API 설계 과정

  1. 자원(Resource) 정의
  2. 행위(HTTP Method) 정의
  3. 표현(Representation) 정의
  4. 상태 코드(Status Code) 정의
  5. API 문서 정의

 

 

 

 

[실습]

1. Package 및 Class 생성 (api.demo)

  • 아래처럼 controller, service Package를 만들고, 하위에 class 를 생성해준다.

 

 

2. 세부 코드 작성

  • interface 작성
    package demo.api.restapi.service;
    
    import java.util.Map;
    
    public interface firstService {
        Map<String, Object> getFirstData();
    }
    

 

  • implement 작성
    package demo.api.restapi.service.impl;
    
    import demo.api.restapi.service.firstService;
    import org.springframework.stereotype.Service;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @Service
    public class firstServiceImpl implements firstService {
        @Override
        public Map<String, Object> getFirstData() {
            Map<String, Object> firstData = new HashMap<>();
    
            firstData.put("label1", "check1");
            firstData.put("label2", "check2");
            firstData.put("label3", "check3");
    
            return firstData;
        }
    }
    

 

 

  • controller 작성
    package demo.api.restapi.controller;
    
    import lombok.RequiredArgsConstructor;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.Map;
    
    @RestController
    @RequiredArgsConstructor
    public class firstController {
        private final demo.api.restapi.service.firstService firstService;
        @GetMapping("/first")
        public Map<String, Object> firstController() {
            return firstService.getFirstData();
        }
    }
    
     

 

무언가 설정이 잘못되었는지 private final firstService firstService; 로 하면 에러가 나더라.

자린이는 이유를 몰라서 그냥 private final demo.api.restapi.service.firstService firstService; 로 합의봤다.

 

 

3. API test

 

 


  •  
반응형