URI는 Uniform Resource Identifier 입니다.
API의 가장 중요한 것은 리소스의 식별(Resouce identify)하는 것입니다.
따라서 대상과 대상하는 행위를 분리해야 합니다.
이를 테면
알고리즘 조회
알고리즘 코드 구현
알고리즘 문제 제출
...
위의 리소스는 알고리즘
입니다.
하지만 리소스로만 API 를 설계하게 된다면 동일한 API가 다른 기능을 해야할 경우가 대부분입니다.
# 예제
- 알고리즘 문제 조회 /algos/{problem_num} -> 아래 URI랑 같은데?
- 알고리즘 문제 제출 /algos/{problem_num} -> 위 URI와 같은데?
그렇다면 이를 어떻게 구분해야 할까요?
위 문제를 해결하기 위해 메서드를 사용합니다.
주요 메서드는 다음과 같습니다.
PUT과 POST
PUT과 POST 메서드의 가장 큰 차이는 리소스를 처리할 때 해당 리소스를 클라이언트가 알고 있느냐 없느냐의 차이입니다.
이를테면 요청을 보낼 때 해당 리소스의 위치를 클라이언트가 알고있는 경우
- /algo/425121235
위와같은 경로로 요청을 보내게 됩니다
하지만 POST의 경우 생성 요청을 보내게 된다면 해당 요청의 시퀀스(새로 채번할 문제 번호)는 서버에서 처리하게됩니다. (클라이언트는 얘가 몇번째 문제인지 알 길이 없음)
- /algo ( )<- ???
위 주요 메서드들을 가지고 비즈니스 로직상에서의 프로세를 구분할 수 없는 경우
POST 메서드를 사용합니다.
안전 : 호출해도 리소스를 변경하지 않는다. ( GET )
멱등 : 여러번 호출하더라도 같은 결과를 응답한다. (POST는 멱등이 아니다. ex. 중복결제)
활용 : 클라이언트와 통신중 서버가 갑자기 장애가 발생할 경우 여러번 요청해도 되나? 의 판단 근거로 작용한다.
캐시 가능 : 주로 GET과 HEAD 정도만 캐시로 사용한다.