728x90
★ REST API, RESTful Service
★ REST, Representational State Transfer
- 웹상의 자원(문서, 이미지, 동영상, 데이터 등)을 자원명으로 표시해서 자원의 상태를 주고 받는 행위
- HTTP URI를 통해서 자원을 명시하고, HTTP Method를 통해서 자원에 대한 CRUD 처리하는 방식
- URI(URL) 표기 방식
★ 게시판 구현
- 1. 여태 사용한 구현 방식 > URI 표현
- 목록보기 GET http://localhost/board/list.do
- 추가하기 POST http://localhost/board/add.do
- 수정하기 POST http://localhost/board/edit.do
- 삭제하기 POST http://localhost/board/del.do
- 검색하기 GET http://localhost/board/list.do?word=검색어
- 2. REST 방식
- 목록보기 GET http://localhost/board
- 추가하기 POST http://localhost/board + 데이터(패킷 저장)
- 수정하기 PUT http://localhost/board/1 + 데이터(패킷 저장)
- 삭제하기 DELETE http://localhost/board/1
- 검색하기 GET http://localhost/board/검색어
★ REST API 설계 규칙
1. URI에 자원을 표시한다. > 마지막 단어가 자원을 표현한다.
2. URI에 동사를 표시하지 않는다.
3. HTTP Method를 사용해서 행동을 표현한다.
a. Get : 리소스 요청
b. POST : 데이터 전달 + 서버측 생성
c. PUT : 데이터 전달 + 수정(전체 수정 - 레코드의 모든 컬럼 수정)
d. PATCH : 데이터 전달 + 수정(일부 수정 - 레코드의 일부 컬럼 수정)
e. DELETE : 데이터 삭제
4. URI + HTTP Method = REST API
5. 구분자는 '/'를 사용한다.
6. URI의 마지막에 '/'를 적지 않는다.
7. '-' 사용이 가능하다. (가끔)
8. '_' 사용하지 않는다. (가독성 문제)
9. 소문자로만 작성한다.
10. 확장자를 작성하지 않는다. > 자원명으로 끝나기 때문(확장자 의미 X)
■ 새 프로젝트 생성
- New > Spring Legacy Project > Spring MVC Project > RESTfullTest > com.test.rest > Finish
■ 기초 환경 셋팅
■ 파일 생성
com.test.controller > TestController.java
com.test.domain > BoardDTO.java
■ 사용 ex)
- TestController.java
@RestController
public class TestController {
@GetMapping("/m1.do")
public BoardDTO m1() {
BoardDTO dto = new BoardDTO();
dto.setSeq("1");
dto.setSubject("제목1");
dto.setContent("내용2");
dto.setRegdate("2023-06-23");
dto.setId("hong");
return dto;
}
}
■ 클라이언트 툴 다운로드
- Insomnia
- https://insomnia.rest/download
★ CRUD 작업
1. 글쓰기
글쓰기
//1. http://localhost:8091/rest/board
//2. POST
//3. return int
//REST 서비스 > 테스트 > 클라이언트 툴(Postman, Insomnia, VSCode, 크롬 확장 프로그램 등..)
@PostMapping("/board")
public int add(BoardDTO dto) {
int result = mapper.add(dto);
return result;
}
- 사용
- json 작성
{
"subject": "제목입니다.",
"content": "내용입니다.",
"id" : "dog"
}
2. 목록 가져오기
//목록 가져오기
//1. http://localhost/rest/board
//2. GET
//3. List<DTO> -> JSON 변환
@GetMapping("/board")
public List<BoardDTO> list() {
return mapper.list();
}
- 사용
3. 요소 수정하기
//요소 수정하기
//1. http://localhost/rest/board/302
//2. PUT or PATCH
//3. return int
@PutMapping("/board/{seq}") //경로 변수(PathVariable)
public int edit(@RequestBody BoardDTO dto, @PathVariable("seq") String seq) {
dto.setSeq(seq);
return mapper.edit(dto);
}
- 사용
- json
{
"subject" : "수정한 제목입니다.",
"content" : "수정한 내용입니다."
}
4. 삭제하기
//삭제하기
//1. http://localhost/rest/board/306
//2. DELETE
//3. return int
@DeleteMapping("/board/{seq}")
public int del(@PathVariable("seq") String seq) {
return mapper.del(seq);
}
- 사용
5. 검색하기
//검색하기
//1. http://localhost/rest/board/3
//2. GET
//3. return DTO
@GetMapping("/board/{seq}")
public BoardDTO get(@PathVariable("seq") String seq) {
return mapper.get(seq);
}
- 사용
728x90
'Spring' 카테고리의 다른 글
Spring Boot STEP 1 - 기초 셋팅 및 실행 (0) | 2023.06.26 |
---|---|
Spring STEP 15 - WEB SOCKET (2) | 2023.06.23 |
Spring STEP 13 - Board 2 (0) | 2023.06.22 |
Spring STEP 13 - Board (0) | 2023.06.21 |
Spring STEP 12 - Spring Security 2 (0) | 2023.06.21 |