API : 클라이언트 - 서버 간의 약속
1. 클라이언트가 정한대로 서버에게 요청(Request)
2. 서버가 요구사항을 처리하여 응답(Response)을 반환
REST
주소에 명사
요청 방식에 동사
를 사용함으로써 의도를 명확히 드러냄을 의미
(여기에 쓰이는 동사는 CRUD)
더보기
EX) A에 대해 생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청
- GET /courses → 강의 전체 목록 조회 요청
- GET /courses/1 → ID가 1번인 녀석 조회 요청
- POST /courses → 강의 생성 요청
- PUT /courses/3 → ID가 3번인 녀석 수정 요청
- DELETE /courses/2 → ID 2번인 녀석 삭제 요청
더보기
주의 사항
- 주소에 들어가는 명사들은 복수형을 사용합니다.
- /course 안됨!
- 주소에 동사는 가급적 사용하지 않습니다.
- /accounts/edit 안됨!
GET
src > main > java > com.sparta.week02 > controller 패키지
CourseController.java 파일 생성
<code />
@RequiredArgsConstructor //5.final이 필요하면 반드시 넣어달라는 lombok 활용
@RestController //6.JSON으로 응답하기위해
public class CourseController {
private final CourseRepository courseRepository; //4. 그럼 CourseRepository가 꼭 필요하니까 멤버변수로 final 줌
@GetMapping("/api/courses") //1. localhost:8080/api/courses에 Get 방식으로 데이터 조회 요청이 오면
public List<Course> getCourses() { //2. 이 메소드를 실행해라 (Course의 List를 반환하는 메소드임)
return courseRepository.findAll(); //3. courseRepository, 즉 SQL을 활용해 Course 목록 반환해야 함
}
}
POST
스프링에서 "요청"하는 방식이 엄격하게 정해져 있음
"요청" = 어떤 데이터를 만들건지 건네주는 방식!
<java />
// PostMapping을 통해서, 같은 주소라도 방식이 다름을 구분합니다.
@PostMapping("/api/courses")
public Course createCourse(@RequestBody CourseRequestDto requestDto) {
//@RequestBody가 있어야 요청한 정보가 requestDto에 들어감(API에서 넘어오는 데이터를 잘 받기 위해)
// requestDto 는, 생성 요청을 의미합니다.
// 강의 정보를 만들기 위해서는 강의 제목과 튜터 이름이 필요하잖아요?
// 그 정보를 가져오는 녀석입니다.
// 저장하는 것은 Dto가 아니라 Course이니, Dto의 정보를 course에 담아야 합니다.
// 잠시 뒤 새로운 생성자를 만듭니다.->Course.java 23줄
Course course = new Course(requestDto);
// JPA를 이용하여 DB에 저장하고, 그 결과를 반환합니다.
return courseRepository.save(course);
}
HEADERS
NAME : 나 지금부터 데이터 같이 보낼건데
Value : 이 녀석의 타입은 ~ 야 !



PUT
<java />
@PutMapping("/api/courses/{id}") // api/courses에 중괄호(변형되는 값)를 쓰고 변수명 넣어줌 -> id값을 넣고 수정
public Long updateCourse(@PathVariable Long id, @RequestBody CourseRequestDto requestDto) {
// 파라미터 2가지 : 1.변경하고 싶은 녀석의 id (@PathVariable : 내가 중괄호로 감싸준 애의 값이야!)
// 2.같이 전달해주는 데이터는 @RequestBody로 하고 Dto 녀석을 쓴다(Course가 바뀌면 안되고
return courseService.update(id, requestDto); //서비스의 update 함수 -> id와 변경할 데이터 가져오면 변경한 뒤 id값 돌려주겠다
}



DELETE
<java />
@DeleteMapping("/api/courses/{id}")
public Long deleteCourse(@PathVariable Long id) {
courseRepository.deleteById(id); //courseRepository는 아무것도 반환을 하지 않기 때문에
return id; //id를 반환하자~
}
'Today I Learned' 카테고리의 다른 글
Git 되돌리기 (0) | 2021.12.09 |
---|---|
Spring 게시판 만들기 (0) | 2021.12.07 |
211129TIL_Lombok, DTO (0) | 2021.12.01 |
211125TIL_자바 완전 기초! (0) | 2021.11.25 |
211123TIL_JPA (0) | 2021.11.25 |