반응형
[이론]
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 설계 과정
- 자원(Resource) 정의
- 행위(HTTP Method) 정의
- 표현(Representation) 정의
- 상태 코드(Status Code) 정의
- API 문서 정의
반응형
[실습]
1. Package 및 Class 생성 (api.demo)
- start.spring.io 에서 내 환경과 맞는 initializr 를 생성한다.
- 아래처럼 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
반응형