REST(Representational State Transfer)는 HTTP 주요 저자중 한명인 Roy Fielding의 2000년 박사학위 논문에서 소개 되었다. Roy Fielding은 당시 아키텍쳐가 웹(HTTP)의 장점을 충분히 담아내지 못한다고 생각하였다고 한다. 그래서 직접 웹(HTTP)의 장점을 최대한 활용한 네트워크 기반의 아키텍처를 소개했는데 이것이 바로 REST인 것이다.
* 네트워크 기반의 아키텍처 : 자원을 정의하고 자원에 대한 주소를 지정하는 방법의 전반을 일컫는다.
1. REST 이해하기
- REST는 자원(Resource)/행위(Method)/메시지 총 세가지로 구성되어 있다.
- 아래 예제를 위에서 언급한 세가지 요소로 살펴보자. 아래 REST를 한문장으로 표현하면 "15000원 하는 어린왕자 책을 추가한다" 이다. 여기서 '책'은 REST의 자원(Resource)에 해당하고 아래 표현에서는 'books'가 이에 해당한다. 그리고 '추가한다'는 REST의 행위(Method)에 해당하며 아래 예제에는 'POST'가 이에 해당한다. 마지막으로 '15000원 하는 어린왕자 책'이 메시지에 해당하며 아래에 books로 작성되어 있는 JSON영역에 해당되는 것이다.
- 각 요소에 대한 설명은 아래에서 구체적으로 살펴보자.
예> HTTP POST, http://bookseller/books
{
"books":{
"name":"The Little Prince"
"price":"15,000"
}
}
1> REST의 리소스
REST는 리소스 지향 아키텍쳐(ROA:Resource Oriented Architechture) 스타일로 모든 것을 리소스 단위로 표현한다. 그렇기 때문에 REST API를 보면 리소스 단위로 API를 설계하는 것을 권장하며 API에 사용된 리소스는 명사로 사용하길 권장한다.
예> gmail.googleapis.com/users/*/messages/* : users와 messages는 api에서 다루는 리소스 정보를 의미하고 있으며 각각 명사형을 사용하고 있는 것을 볼 수 있다.
• 리소스를 명사로 명시할 때는 users와 같이 복수형을 사용하는 것이 좋다.
2> REST의 행위(Method)
API의 의미를 살펴 보면 대부분 'xxx을 조회한다.', 'xxx을 생성한다', 'xxx을 삭제한다'와 같이 행위에 대한 부분이 빠질수 없다. REST에서는 이와 같은 행위에 대한 메서드를 HTTP 메서드를 그대로 사용한다.
HTTP에는 다양한 메서드가 존재하지만 REST에서는 그 중 CRUD(Create Read Update Delete)에 해당하는 4가지 메서드만 사용한다.
a. POST : 생성 [Create]
- 예> HTTP POST, http://bookseller/books -> 책 항목을 생성한다.
b. GET : 조회 [Select]
- 예> HTTP GET, http://bookseller/books -> 책 항목을 모두 조회한다.
c. PUT : 업데이트 [Update]
- 예> HTTP PUT, http://bookseller/books -> 해당 책 항목에 정보를 업데이트 한다.
d. DELETE : 삭제 [Delete]
- 예> HTTP DELETE, http://bookseller/books -> 해당 책 항목들을 삭제 한다.
메서드 부분에서는 추가적으로 주의해서 알아두어야 할 것이 있다.
바로 Idempotent이다.
Idempotent는 여러번 수행을 해도 결과가 동일한 경우를 의미한다.
예를 들어 POST 메서드를 호출할 때마다 해당 항목의 Count를 증가시키는 경우라면 이 것은 Idempotent하지 않다. 하지만 GET 메서드를 통해 해당 항목의 정보를 조회만 하는 경우에는 Idempotent하다고 볼 수 있는 것이다.
이와 같은 Idempotent가 중요한 이유는 서로 연관된 여러 API가 동시에 사용되는 경우, 하나의 API동작이 실패하게 되면 Idempotent 하지 않는 API에 대해서는 트렌잭션과 같은 부분을 추가적으로 고민해줘야 할 필요가 있기 때문이다.
3> Rest API 예제
앞에서 알아본 기본적인 개념과 REST 구성을 바탕으로 예시를 통해 다시 한번 정리해 보자.
3-1> 생성 : The Little Prince 책 생성하기
HTTP POST, http://bookseller/books
{
"books":{
"name":"The Little Prince"
"price":"15,000"
}
}
3-2> 조회 : Justice 책 정보 조회 하기
HTTP GET, http://bookseller/books/Justice
3-3> 업데이트 : The Little Prince 책 정보 변경
HTTP POST, http://bookseller/books
{
"books":{
"name":"The Little Prince"
"price":"14,500"
}
}
3-4> 삭제 : Unit Test 책 항목 삭제
HTTP DELETE, http://bookseller/books/Unit Test
Rest API 참고 링크
https://digitalbourgeois.tistory.com/53
https://digitalbourgeois.tistory.com/54
'API' 카테고리의 다른 글
RPS와 TPS의 차이점 무엇일까? (0) | 2024.01.25 |
---|---|
[부하테스트] Locust란 무엇인가? (0) | 2023.12.12 |
[API] REST API 보안 (0) | 2019.01.15 |
[API] REST API 설계 해보기 (0) | 2019.01.09 |
[API] REST API (특성) (0) | 2018.12.26 |