반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 스프링 빈
- mybatis
- 스프링 컨테이너
- 스프링 부트
- SQL
- thymeleaf
- db
- jdbc
- JPA
- spring
- 스프링 부트 입문
- 스프링 프레임워크
- Javascript
- 스프링
- DI
- 생성자 주입
- @Configuration
- java
- Effective Java
- sqld
- resultMap
- kafka
- springboot
- DIP
- 싱글톤
- 스프링부트
- assertThrows
- assertThat
- 필드 주입
- 스프링 부트 기본
Archives
- Today
- Total
선 조치 후 분석
REST? RESTful? 개념 정리와 코드를 통한 예시 본문
728x90
반응형
SMALL
REST
Representational State Transfer의 약자로, 웹 기반의 아키텍처 스타일 중 하나
REST는 자원을 고유한 URI로 표현하고 HTTP 메서드를 통해 자원에 대한 CRUD 동작을 수행하는 아키텍처 스타일
RESTful API
REST 아키텍처 원칙을 따르는 API
특징
- 자원 (Resource) : 웹 리소스를 나타내는 개념으로, URI로 식별
예를 들어, "/users"는 사용자 리소스, "/products"는 제품 리소스를 나타낸다. - HTTP 메서드 : CRUD 작업을 나타내는 HTTP 메서드 사용
GET - 조회 | POST - 생성 | PUT - 갱신 | DELETE - 삭제 - Representations : 리소스의 표현 형태로 JSON, XML 등이 사용
GET - 좋은 예
// 리소스 가져오기
@GetMapping("/api/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userRepository.findById(id).orElse(null);
if (user != null) {
return ResponseEntity.ok(user);
} else {
return ResponseEntity.notFound().build();
}
}
POST - 좋은 예
// 리소스 생성
@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User newUser) {
User savedUser = userRepository.save(newUser);
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
PUT - 좋은 예
// 리소스 업데이트
@PutMapping("/api/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
User user = userRepository.findById(id).orElse(null);
if (user != null) {
updatedUser.setId(id);
User savedUser = userRepository.save(updatedUser);
return ResponseEntity.ok(savedUser);
} else {
return ResponseEntity.notFound().build();
}
}
DELETE - 좋은 예
// 리소스 삭제
@DeleteMapping("/api/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userRepository.deleteById(id);
return ResponseEntity.noContent().build();
}
GET - 나쁜 예
// 경로 변수가 아닌 요청 파라미터로 사용
@GetMapping("/api/users")
public ResponseEntity<User> getUserById(@RequestParam Long id) {
User user = userRepository.findById(id).orElse(null);
if (user != null) {
return ResponseEntity.ok(user);
} else {
return ResponseEntity.notFound().build();
}
}
POST - 나쁜 예
// 경로 변수가 아닌 요청 파라미터로 사용
@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestParam String username, @RequestParam String email) {
User newUser = new User(username, email);
User savedUser = userRepository.save(newUser);
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
PUT - 나쁜 예
// 경로 변수가 아닌 요청 파라미터로 사용
@PutMapping("/api/users")
public ResponseEntity<User> updateUser(@RequestParam Long id, @RequestParam String username, @RequestParam String email) {
User user = userRepository.findById(id).orElse(null);
if (user != null) {
user.setUsername(username);
user.setEmail(email);
User savedUser = userRepository.save(user);
return ResponseEntity.ok(savedUser);
} else {
return ResponseEntity.notFound().build();
}
}
DELETE - 나쁜 예
// 경로 변수가 아닌 요청 파라미터로 사용
@DeleteMapping("/api/users")
public ResponseEntity<Void> deleteUser(@RequestParam Long id) {
userRepository.deleteById(id);
return ResponseEntity.noContent().build();
}
좋은 예는 RESTful 한 API 디자인을 원칙을 따르고 있다.
나쁜 예는 경로 변수 대신 요청 파라미터를 사용하거나, 리소스 식별이 모호한 경우이다.
RESTful 한 API를 디자인할 때는 URL 패턴, HTTP 메서드, 요청 본문 등을 명확하게 사용하여
리소스의 조회, 생성, 갱신, 삭제와 같은 동작을 명확하게 나타내는 것이 중요하다.
728x90
반응형
LIST
'Solution > Web' 카테고리의 다른 글
[Web] HTTP와 HTTPS 개념 정리 그리고 SSL/TLS (1) | 2025.01.03 |
---|---|
[Session] localStorage, sessionStorage 사용법과 차이점 (0) | 2022.10.07 |
[Web] ResutFul API의 이해 (0) | 2022.05.11 |