반응형
(3) Update - UPDATE - Put
// 수정해주세요 Update - UPDATE
// 수정할 데이터 필요 -> body 있음
// UPDATE post SET title = ?, content = ? WHERE id = ?
// 협업을 하기 위해 API 문서 필요
@PutMapping("/post/{id}") // WHERE절의 조건은 주소에, 변경할 데이터는 body에 (규칙)
public String test3(String title, String content, @PathVariable int id) {
// title, content (primary key : id) 수정
return "수정해주세요 : title : " + title + ", content : " + content + ", id : " + id;
}
title과 content 2개를 수정할 때는
수정하고 싶은 데이터 말고 PK(id)도 같이 보내야 한다.
body에 수정하고 싶은 데이터를 보내는데,
id를 수정할 건 아니고, 수정하고 싶은 사람을 찾을 때
id가 필요한 것이기 때문에
PK의 값은 주소에 요청한다.
위 요청의 쿼리문은 아래와 같다.
UPDATE post SET title = ?, content = ? WHERE id = ?
WHERE절의 조건은 주소로 전송해주어야 한다.
변경하고 싶은 데이터는 body에 담아 보낸다.
그렇기 때문에 get 요청은 모두 주소에 적어준 것이다.
WHERE절의 조건이니까!
Restful API
: 자원을 가지기 위한 API
-> 컨트롤러의 메서드
그 메서드에 접근하기 위한 주소 설계 규칙이 있다.
- 주소에 동사를 쓰지 않는다.
- 이유 : 동사는 Get, Post, Put, Delete 가능하기 때문
- 첫 주소에는 테이블명 : /post
- 구체적인 것이 필요할 때
그게 primary key면 : /post/1 - primary key가 아니라면 쿼리 스트링 : /post?count=2
- 1번 유저(userTbl)의 모든 게시글(postTbl)을 달라
http://localhost:8000/user/1/post - 1번 유저(userTbl)의 2번째 게시글(postTbl)을 달라
http://localhost:8000/user/1/post/2
(4) Delete - DELETE - Delete
// 삭제해주세요 Delete - DELETE
// 구체적으로 삭제해주세요 -> body 없음
// 구체적인 id는 주소로 요청
// DELETE from post WHERE id = ?
// 만약 http://localhost:8000/post?title=제목1
// DELETE from post WHERE title = ?
// title은 PK가 아니니까 WHERE에 있어도 쿼리 스트링
// 키값이 필요없기때문에 주소에 쓸 수 있는것
@DeleteMapping("/post/{id}")
public String test4(@PathVariable int id) {
return "삭제해주세요 id : " + id;
}
Delete도 마찬가지로
WHERE절의 조건이기 때문에
주소에 요청한다.
http://localhost:8000/post/1
DELETE from post WHERE id = ?
만약 id가 아닌 title을 조건으로
삭제할 때도 주소에 요청할까?
DELETE from post WHERE title = ?
이때 title은 주소로 받지만
쿼리 스트링으로 요청해야 한다.
http://localhost:8000/post?title=제목1
title은 PK가 아니기 때문에
쿼리 스트링으로 요청한다.
package site.metacoding.second.web;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PostApiController {
// 주세요 Read - SELECT
@GetMapping("/post/{id}")
public String test1(@PathVariable int id) {
// 1번 게시글 주세요
return "주세요 id : " + id;
}
// SELECT * FROM post WHERE title = ?
@GetMapping("/post")
public String search(String title) {
// title이 ~인 것 찾아 주세요
return "주세요 title : " + title;
}
// 줄게요 Create - INSERT
@PostMapping("/post")
public String test2(String title, String content) {
// 제목, 내용 줄게요
return "줄게요 : title : " + title + ", content : " + content;
}
// 수정해주세요 Update - UPDATE
@PutMapping("/post/{id}")
public String test3(String title, String content, @PathVariable int id) {
// title, content (primary key : id) 수정
return "수정해주세요 : title : " + title + ", content : " + content + ", id : " + id;
}
// 삭제해주세요 Delete - DELETE
@DeleteMapping("/post/{id}")
public String test4(@PathVariable int id) {
return "삭제해주세요 id : " + id;
}
}
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형