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 |