해당 글은 공부하기 위해 작성한 글이고, 아래 두개의 링크를 보고 작성한 글임을 알려드립니다.
https://velog.io/@stampid/REST-API%EC%99%80-RESTful-API
https://meetup.toast.com/posts/92
REST란 Representational State Transfer
의 약자이다.
자원을 URI
로 표시하고 해당 자원의 상태를 주고 받는 것을 의미한다.
즉, REST API
란 REST 기반의 규칙들을 지켜서 설계된 API 이다.
REST API 를 RESTful API 라고도 하는 것 같다.
즉 Rest
는 URI
를 통해 자원을 표시하고, HTTP Method
를 이용하여 해당 자원의 행위를 정해주며 그 결과를 받는 것을 말한다.
Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
Stateless (무상태성)
작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만 단순히 처리하면 된다.
서버는 각각의 요청을 완전히 다른 것으로 인식하고 처리를 한다.
때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
Cacheable (캐시 기능)
HTTP의 기존 웹 표준을 그대로 사용하기 때문에 HTTP가 가진 캐싱 기능 적용이 가능하다.
Self-descriptiveness(자체 표현 구조)
REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것입니다.
Client-Server 구조
Rest 서버는 API 제공을 하고 클라이언트는 사용자 인증에 관련된 일들을 직접 관리한다.
자원이 있는 쪽을 Server라고 하고 자원을 요청하는 쪽이 Client가 된다.
서로간의 의존성이 줄어들기 때문에 역할이 확실하게 구분되어 개발해야 할 내용들이 명확해진다.
계층형 구조
클라이언트는 Rest API 서버만 호출한다.
REST 서버는 다중 계층으로 구성될 수 있으면 로드 밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 둘 수 있다.
REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다. (이 두가지는 꼭 기억하자)
GET
: 정보 가져오기POST
: 정보 생성하기PUT
: 정보 업데이트DELETE
: 정보 삭제하기# 나쁜코드
GET courses/show/1
# 좋은코드
GET courses/1
GET courses/1 # 1번 course 가져오기
POST courses # course 생성
DELETE courses/1 # 1번 course 삭제
http://test.com/courses/teacher
http://test.com/courses/teacher/ [x]
http://test.com/courses/teacher [o]
하이픈(-) 은 URI 가독성을 높이는데 사용한다.
URI를 쉽게 읽고 해석하기 위해, 불가피하게 긴 URI경로를 사용하게 된다면 하이픈(-)을 사용해 가독성을 높일 수 있다.
언더바(_) 는 URI에 사용하지 않는다.
밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다.
그렇기 때문에 언더바(_) 대신 하이픈(-) 을 사용한다.
URI 는 소문자를 사용한다.
대소문자에 따라 다른 리소스로 인식하게 된다.
파일 확장자는 URI 에 포함하지 않는다.
http://test.com/courses/teacher.png [x]
2xx 성공
3xx 리다이렉션
4xx 클라이언트 오류
5xx 서버 오류