Burninghering's Blog
article thumbnail
Published 2021. 12. 2. 06:40
211130TIL_API Today I Learned

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 : 이 녀석의 타입은 ~ 야 ! 

GET 할때도 json으로 받았듯이, 요청을 전달할 때도 GET 방식으로 보내주자 
BODY에서 json 형식으로 작성해주고 SEND!
GET으로 확인해보니 잘 생성되어 있다!


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값 돌려주겠다 }

일단 GET요청 했는데 H2 DB라 id 2번 날아감 ~.~
id값 넣고 HEADER 값 넣어주고 ~
SEND 하면 변경한 정보의 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
profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.