API 시스템을 구현하기 위한 아키텍처(Graphql, SOAP, GRPC, REST, ...) 중에 가장 널리 사용되는 형식
REST(REpresentational State Transfer)
란 웹에 존재하는 모든 자원(resorce, ex. 이미지, 동영상, 데이터)에 고유한 URI를 부여하여 자원에 대한 주소를 지정하는 방법론, 또는 규칙.장점
: self-descriptiveness, RESTful API는 그 자체만으로도 API의 목적이 쉽게 이해된다.단점
: 표준규약이 없어, 안티패턴으로 작성되는 경우가 흔하다.안티패턴: 실제 많이 사용되는 패턴이지만 비효율적이거나 비생산적인 패턴
해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소
ex) https://finance.naver.com/login
ex) https://finance.naver.com/news
HTTP request가 의도하는 action을 정의한 것
HTTP request에서 server로 보내는 데이터 (body)
URI 정보를 명확하게 표현해야 한다.
GET /user/1
(X) GET /users/1
(O)resource에 대한 행위를 HTTP Method(GET
, POST
, PUT
, DELETE
)로 표현한다.
GET delete/user/1
(X) DELETE/users/1
(O)GET /user/show/1
(X) GET /users/1
(O)POST insert/user/2
(X) POST /users/2
(O)resource 사이에 연관 관계가 있는 경우
: /리소스/고유ID/관계 있는 리소스
ex) GET /users/{user_id}/profile
파일의 경우 payload의 포맷을 나타내기 위한 파일 확장자를 URI에 포함시키지 않는다.
ex) GET user/1/profile-photo.jpg
(X)
ex) GET user/1/profile-photo
(O)
(이때, payload의 포맷은 headers에 accept를 사용한다.)
URI는 /
구분자를 사용하여 자원의 계층 관계를 나타내는 데 사용한다.
URI 마지막 문자로 /
를 포함하지 않는다.
ex) GET users/portfolios/
(X)
불가피하게 URI가 길어지는 경우 -
을 사용하여 가독성을 높인다.
_
는 사용하지 않는다.
URI 경로에는 대문자 사용을 피하도록 규정하고 있다.
PUT, PATCH: 특정 데이터 수정
?key=value
GET
method를 사용한다.데이터를 조건으로 거르거나(filtering
), 특정 방식으로 정렬하거나(sorting
), 검색(searching
)하고자 하는 경우에 활용된다.
500
은 서버 문제지만 프론트엔드에서 key를 잘못 전달했을 때 발생할 수도 있으니 같이 확인해야 한다.