본문 바로가기

IT/WEB

[WEB] RESTful 이란?

1. REST(Representational State Transfer)란?

REST는 WWW(월드 와이드 웹)와 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식입니다.

REST는 올바른 HTTP 사용을 유도하고 있기 때문에 HTTP 장점을 최대한 살린 서비스를 설계할 수 있습니다.
REST의 기본 원칙을 성실하게 지킨 서비스를 "RESTful 하다"라고 표현합니다.

 

2. REST 필수 규칙

* URI는 정보의 자원을 표현해야한다.
* 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)으로 표현한다.
* 특정 행위의 표현은 JSON, XML 등을 이용한다. 
POST http://localhost/bamdule/members
{
   "name" : "kim",
   "email" : "xxxx@gmail.com"
}

// member 저장

 

3. HTTP Method 설명

Method 역할
POST Resource 생성
GET Resource 조회
PUT Resource 수정
DELETE Resource 삭제

 

4. Collection과 Document

Document
1개의 개체를 나타내는 것으로 객체 인스턴스, DB의 Record와 유사한 개념을 가집니다. 
일반적으로 리소스의 집합 중 하나를 의미하며 Collection 뒤에 위치합니다.

Collection
Document들의 묶음입니다. 일반적으로 복수 형태의 단어를 사용합니다.

예제
http://localhost/members/{id}
members가 Collections이고 {id}가 Document를 의미합니다.

 

3. REST API 디자인 가이드

- URI는 정보의 자원을 표현해야합니다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)으로 표현합니다.
- 특정 행위의 표현은 JSON, XML 등을 이용합니다.
- 리소스 명은 동사보다 명사를 사용합니다.

1) 데이터 조회(GET)

GET http://localhost/bamdule/members
{
  "name" : "kim",
  "page" : 2,
  "rows" : 20 
}
members 중에서 이름이 kim인 member들를 조회한다. (2페이지에 20개씩 조회)

2) 데이터 삽입(POST)

POST http://localhost/bamdule/members
{
  "name" : "kim",
  "email" : "xxxx@gmail.com",
  "birth" : "910505"
}
member를 생성한다.

3) 데이터 수정(PUT)

PUT http://localhost/bamdule/members/5
{
  "name" : "lee"
  "email" : "xxxx@gmail.com",
  "birth" : "971205"
}
id가 5번인 member를 수정한다.

4) 데이터 삭제 (DELETE)

DELETE http://localhost/bamdule/members/5
id가 5번인 member를 삭제한다.

 

4.URL Rules

  • URI 마지막에 "/"를 포함하지 않는다.

  • "_" 대신 "-" 를 사용한다.

  • 소문자를 사용한다.

  • 행위(method)는 URI에 포함하지 않는다.

  • 컨드롤 자원을 의미하는 URI은 예외적으로 동사를 허용한다. (ex : http://localhost/members/duplicate )
  • http accept는 aplication/json으로 기본으로 설정해라
  • "/"는 계층관계를 나타내는데 사용해라

  • URI에 자원의 행위를 명시하지 말아라 (ex : http://localhost/members/insert (x)  )

  • 리소스 간 관계를 표현할 때 다음과 같이 한다. 
GET http://localhost/members/{memberId}/boards

 

5. HTTP 응답 코드

1) 2xx 성공

  • 200: 클라이언트의 요청을 정상적으로 수행
  • 201: 클라이언트에게 생성 작업을 요청 받았고, 생성 작업을 성공
  • 204: 요청은 성공 했지만 응답할 콘텐츠가 없음

2) 3xx 리다이렉션

  • 301: 클라이언트가 요청한 리소스에 대한 URI가 영구적으로 변경되었을 때 사용함.
  • 302: 301과 같으나 임시적으로 주소가 바뀌었을 경우 사용함.
  • 304: 이전에 방문했을 때의 요청 결과와 다르지 않을 경우 사용함. 캐시된 페이지를 그대로 사용.
  • 307: 임시 페이지로 리다이렉트.

3) 4xx 클라이언트 오류

  • 400: 클라이언트가 올바르지 못한 요청을 보냄.
  • 401: 로그인을 하지 않아 페이지를 열 권한이 없음.
  • 403: 금지된 페이지, 로그인을 하든 안하든 접근할 수 없음. (관리자 페이지)
  • 404: 찾을 수 없는 페이지, 주소를 잘 못 입력했을 때 사용함.
    403 대신에 사용할 수도 있음.(해커들의 공격을 방지하고자 페이지가 없는 것처럼 위장함)
  • 408: 요청 시간이 초과됨.
  • 409: 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우. (회원가입 중 중복된 아이디인 경우)
  • 410: 영구적으로 사용할 수 없는 페이지.

4) 5xx 서버 오류

  • 501: 해당 요청을 처리하는 기능이 만들어지지 않음.
  • 502: 서버로 가능 요청이 중간에서 유실된 경우.
  • 503: 서버가 터졌거나 유지 보수 중
    (유지 보수 중일때는 유지 보수중이라는 것을 알려주는 페이지로 전송해주는 것이 좋음)
  • 504: 서버 게이트웨이에 문제가 생겨 시간 초과가 된 경우.
  • 505: HTTP 버전이 달라 요청이 처리할 수 없음.

참조

spoqa.github.io/2012/02/27/rest-introduction.html
ko.wikipedia.org/wiki/REST
sanghaklee.tistory.com/57
velog.io/@stampid/REST-API%EC%99%80-RESTful-API

'IT > WEB' 카테고리의 다른 글

[CSS] CSS 변수 사용하기  (0) 2021.01.24
[WEB] CSRF란 ?  (0) 2020.07.30
[WEB] HTTP의 특징과 HTTP Message  (0) 2020.07.30