본문 바로가기
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

 

 


  •  
반응형