본문 바로가기

카테고리 없음

REST API 정리

경로는 자원이름을 복수형으로 쓴다. 

자원은 객체지향에서 객체의 개념이다. 

 

경로에는 동작이 들어가면 안된다. uri가 아니라메소드(POST, GET, PUT, DELETE...)로 행위를 구분한다. 

자원이름은 하이픈, 소문자 조합이 권장된다.

 

왜이렇게 하는가?

 

경로 이름이 일관적이지 않고 지저분하다. 

getMovieList/searchMovie...

editMovie/updateMovie...

deleteMovie/removeMovie/dropMovie...

 

restful하게 변경하면 훨씬 깔끔하다. 

GET /movies, /movies/{title}

POST /movies

PUT /movies

DELETE /movies 

 

GET 요청

자원을 검색할 때  사용한다. ex) 게시글 조회

request body를 같이 보낼 수 없다.

경로에 파라미터를 넣어서 보내는데 캐싱이되고 브라우저 히스토리에 남는다. 보안상 취약하다. 

반드시 무언가를 리턴해야한다. 

자원을 상세하게 요청을 할 때에는 자원의 고유값을 경로에 넣는다

ex) /movies/{movie_id}

 

POST

자원을 생성할 때  사용한다.  ex) 게시글 작성 

request body에 값을 넣어서 보낸다. request body와 경로 파라미터 동시에 사용해도 된다. 

GET보다 보안상 안전하기 때문에 로그인 등 보안적인 측면이 중요시되는 작업에 사용한다. 

값을 리턴하든 말든 옵션이다. 

생성한 자원을 리턴하지 않아서 새로 GET으로 요청하는 것은 비효율적이다.

생성한 자원을 어디서 찾을 수 있는지 경로를 리턴하면 도움이 된다. 

 

PUT

자원을 업데이트 할 때 사용한다. ex) 게시글 수정 

 

DELETE 

자원을 삭제할 때 사용한다. 

ex) 로그아웃, 게시글 삭제 

 

대표적인게 4가지 메서드이고 VIEW, PATCH등 다른 메서드도 존재한다. 

 

이해가 안되었던 점

로그인은 회원 정보를 조회하는건데 왜 GET이 아니라 POST인가? 

세션, jwt 엑세스 토큰 등 인증 객체를 생성하므로 POST라고 볼 수 있다.

로그아웃할 때에는 세션이나 refresh 토큰을 삭제하기 때문에 DELETE를 사용하는것이 restful하다. 

 

자주 쓰는 경로 예시

POST /sessions, /auth

DELETE /sessions, /auth

 

안좋은 예시

/users/login

-> 로그인은 자원도 아니고 행위를 나타내므로  restful하지 않음