REST란, Representational State Transfer의 약자다.
HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처다. 다시 말하면, 서버에 있는 자원을 URI
로 표시하고 HTTP Method
를 이용해 해당 자원의 상태를 주고 받는 것을 의미한다.
REST는 자원
, 행위
, 표현
이 3가지 요소로 구성됩니다.
자원
서버는 유일한 ID를 가지는 자원을 가지고 있으며, 클라이언트는 이러한 자원에 요청을 보냅니다. URI의 말단에 표현됩니다. (ex: https://kdt.roto.codes/"todos")
행위
자원에 대한 행위를 의미합니다. HTTP Method 라고 부르며 종류는 GET, POST, PUT, PATCH, DELETE등이 있습니다.
HTTP 요청 메소드 | 목적 |
---|---|
GET | 모든/특정 리소스 취득 |
POST | 리소스 생성 |
PUT | 리소스의 전체 교체 |
PATCH | 리소스의 일부 수정 |
DELETE | 모든/특정 리소스 삭제 |
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.send();
표현
자원에 대한 행위의 구체적 내용을 의미합니다. 위 링크에 "todos"가 json형식의 데이터로 응답 받아온 것을 예로 들 수 있습니다.
Uniform Interface (일관된 인터페이스)
Stateless (무상태성)
Cacheable (캐시가능)
Client-Server Architecture (서버-클라이언트 구조)
Self-Descriptiveness (자체 표현)
HTTP POST , http://localhost:8080/board
{
"board":
{
"title":"제목",
"content":"내용"
}
}
Layed System (계층화)
REST 기반의 규칙들을 잘 지켜서 설계된 API를 REST API 또는 RESTful로 부른다.
URI는 정보의 자원을 표현해야한다.
GET/todos/1 => Good👍
POST/student/phoneNumber => Good👍
GET/getTodos/2 => Nope💦
DELETE/deleteName/1 => Nope💦
자원에 대한 행위는 HTTP Method로 표현한다.
계층 관계는 / 를 이용해 나타낸다.
http://kdt/frontend/b/names
URI 마지막은 / 를 사용하면 안된다.
하이픈(-)은 가독성을 높이는데 사용한다.
언더바(_) 혹은 밑줄은 사용하지 않는다.
URI 경로에는 소문자가 적합하다.
파일 확장자는 URI에 포함하지 않는다.
http://kdt/frontend.html => Node💦
200: 클라이언트의 요청을 정상적으로 수행함
201: 클라이언트에게 생성 작업을 요청 받았고, 생성 작업을 성공함
204: 요청은 성공 했지만 응답할 콘텐츠가 없음
301: 클라이언트가 요청한 리소스에 대한 URI가 영구적으로 변경되었을 때 사용함
302: 301과 같으나 임시적으로 주소가 바뀌었을 경우 사용함
304: 이전에 방문했을 때의 요청 결과와 다르지 않을 경우 사용함. 캐시된 페이지를 그대로 사용
307: 임시 페이지로 리다이렉트
400: 클라이언트가 올바르지 못한 요청을 보냄
401: 로그인을 하지 않아 페이지를 열 권한이 없음
403: 금지된 페이지, 로그인을 하든 안하든 접근할 수 없음
404: 찾을 수 없는 페이지, 주소를 잘 못 입력했을 때 사용함
408: 요청 시간이 초과됨
409: 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우
410: 영구적으로 사용할 수 없는 페이지
501: 해당 요청을 처리하는 기능이 만들어지지 않음
502: 서버로 가능 요청이 중간에서 유실된 경우
503: 서버가 터졌거나 유지 보수 중
504: 서버 게이트웨이에 문제가 생겨 시간 초과가 된 경우
505: HTTP 버전이 달라 요청이 처리할 수 없음