REST란 무엇인가
"REpresentational State Transfer" 의 약자로,
자원을 이름(자원의 표현)
으로 구분해 해당 자원의 상태(정보)
를 주고 받는 모든 것을 의미한다.
즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 뜻한다.
- 자원 : 해당 소프트웨어가 관리하는 모든 것 ( 문서, 그림, 데이터, 해당 소프트웨어 자체 등 )
- 표현 : 그 자원을 표현하기 위한 이름 (DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함)
- 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다. (JSON 혹은 XML을 통해 데이터를 주고받는 것이 일반적이다.)
REST의 구체적인 개념
- HTTP URI를 통해 자원을 명시하고,
HTTP Method (POST, GET, PUT, DELETE)
를 통해
해당 자원에 대한 생성, 읽기, 수정, 삭제를 적용하는 것을 의미한다.
결론
- REST는 네트워크상에서 Client와 Server 사이의 통신 방식 중 하나이고,
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다!
REST가 필요한 이유
- 다양한 클라이언트 등장
- 최근의 서버 프로그램은 다양한 브라우저와 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야 한다.
이러한 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과, REST에 관심을 가지게 되었다.
REST의 장단점
장점
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다
- REST API 메시지는 의도하는 바를 명확하게 나타내므로
의도하는 바를 쉽게 파악할 수 있다
- 서버와 클라이언트의 역할을 명확하게 분리한다
단점
- 표준 자체가 존재하지 않아 정의가 필요하다
- Over Fetching : 불필요한 정보들까지 데이터들 받아야 한다
- Under Fetching : 필요한 정보보다 적은 데이터가 오는 경우
- 2개의 API를 요청하는 경우 두 번 요청해야 하므로 느리다
ex) 일별 박스오피스, 영화목록
일별 박스오피스에서 movieNm 가져오고,영화목록에서 peopleNm을 가져오고 싶다면 박스오피스 한번 영화목록 한번 이렇게 두번 보내야한다.
REST의 구성
자원(Resource) - URI
행위(Verb) - Method
- HTTP 프로토콜의 Method를 사용합니다.
- HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE의 Method를 제공합니다. ( CRUD )
- GET => Read : 정보 요청, URI가 가진 정보를 검색하기 위해 서버에 요청한다.
- POST => Create : 정보 입력, 클라이언트에서 서버로 전달하려는 정보를 보낸다.
- PUT => Update : 정보 업데이트, 주로 내용을 갱신하기 위해 사용한다. (데이터 전체를 바꿀 때)
- PATCH => Update : 정보 업데이트, 주로 내용을 갱신하기 위해 사용한다. (데이터 일부만 바꿀 때)
- DELETE => Delete : 정보 삭제
REST의 특징
Server-Client (서버-클라이언트 구조)
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 됩니다.
REST Server
는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고, REST Client
는 사용자 인증이나 context( 세션, 로그인 정보 ) 등을 직접 관리하고 책임집니다.
- 역할을 확실히 구분시킴으로써 서로 간의 의존성을 줄입니다.
Stateless (무상태)
- HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖습니다.
- Client의 context를 Server에 저장하지 않습니다.
- 즉, 세션과 쿠키와 같은 context 정보를 신경 쓰지 않아도 되므로 구현이 단순해집니다.
- Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리합니다.
- 각 API 서버는 Client의 요청만을 단순 처리합니다.
즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안 됩니다. ( DB에 의해 바뀌는 것은 허용 )
- Server의 처리 방식에 일관성을 부여하기 때문에 서비스의 자유도가 높아집니다.
Cacheable (캐시 처리 기능)
- 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있습니다.
- 즉, HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있습니다.
- 대량의 요청을 효율적으로 처리할 수 있습니다.
- Uniform Interface란 URI로 지정한 Resource에 대한 요청은 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미합니다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다
REST API 란
API 란
- API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다.
REST API 정의
- REST의 특징을 기반으로 서비스 API를 구현한 것
REST API 규칙
-
소문자를 사용한다.
주소에서 대소문자를 구분하므로, 카멜방식이 아닌 소문자를 사용하여 작성한다.
Bad
: http://restapi.example.com/users/postComments
Good
: http://restapi.example.com/users/post-comments
-
언더바를 대신 하이픈을 사용한다
가급적 하이픈의 사용도 최소화하며, 정확한 의미나 표현을 위해 단어의 결합이 불가피한 경우에 사용한다.
Bad
: http://restapi.example.com/users/post_comments
Good
: http://restapi.example.com/users/post-comments
-
마지막에 슬래시를 포함하지 않는다.
슬래시는 계층을 구분하는 것으로, 마지막에는 사용하지 않는다.
Bad
: http://restapi.example.com/users/
Good
: http://restapi.example.com/users
-
행위는 포함하지 않는다.
행위는 URL 대신 Method를 사용하여 전달한다. (GET, POST, PUT, DELETE 등)
Bad
: POST http://restapi.example.com/users/1/delete-post/1
Good
: DELETE http://restapi.example.com/users/1/posts/1
-
파일 확장자는 URI에 포함하지 않는다.
REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함하지 않습니다.
Bad
: http://restapi.example.com/users/photo.jpg
Good
: GET http://restapi.example.com/users/photo
-
HTTP 응답 상태 코드를 사용한다.
- 상태 코드는 3 자릿수 숫자로 만들어져 있으며, 각 첫 번째 자리의 수로 그룹을 구분한다.
- 1xx : 정보 응답 / 2xx : 성공 응답 / 3xx : 리다이렉트 / 4xx : 클라이언트 요청 오류 / 5xx : 서버 오류
REST API 예시
생성
- 생성
이름이 corgi, 나이가 3살인 강아지 정보를 생성해줘
POST http://mypet/pets
{
"pets":{
"name": "corgi",
"age": 3
}
}
- 이 요청은 코기 라는 강아지 정보를 등록합니다.
- http://mypet/pets 라는 리소스로 이름은 “corgi”, HTTP POST 를 정의했습니다.
- 조회
이름이 corgi인 강아지 정보를 가져와 줘
GET http://mypet/pets/corgi
Response
{
"name": "corgi",
"age": 3
}
- 이번엔 방금 생성한 코기의 정보를 가져왔습니다.
- 조회를 해야 하기 때문에 HTTP Method 는 GET 방식을 사용했고, URI에 가져올 리소스인 강아지 정보 중 corgi를 특정했습니다.
- 수정
corgi의 이름을 welshcorgi, 나이를 5살로 변경해줘
PUT http://mypet/pets/corgi
{
"name": "welshcorgi",
"age": 5
}
- corgi의 이름을 welshcorgi로, 나이를 5살로 변경했습니다.
- 리소스를 수정해야 하므로 HTTP Method 는 PUT 방식을 사용했습니다.
- 삭제
강아지 정보 중 welshcorgi란 이름을 가진 정보를 삭제해줘
DELETE http://mypet/pets/welshcorgi
Response 204 (요청을 성공적으로 처리했지만 제공할 콘츠는 없음)
- welshcorgi의 정보를 삭제했습니다.
- 이번엔 삭제를 해야 하기 때문에 HTTP Method 는 DELETE를 사용했습니다.
용어정리
-
URI & URL
-
URL : Uniform Resource Locator로 인터넷상 자원의 위치를 의미합니다.
-
URI : Uniform Resource Identifier로 인터넷상의 자원을 식별하기 위한 문자열의 구성으로이다
-
URI는 URL을 포함하게 됩니다. URI가 URL보다 포괄적인 범위라고 할 수 있습니다.
-
웹 클라이언트 & 웹 브라우저
- 웹 클라이언트 : 서비스를 제공받는 쪽을 뜻하며, 컴퓨터, 프로그램을 지칭한다.
- 웹 관련 서비스를 받으면 웹 클라이언트라 하고, 메일 서비스를 받으면 메일 클라이언트라고 한다.
- 웹 브라우저 : 웹 브라우저는 사용자가 원하는 정보를 요청하고, HTML 언어를 해독하여 웹 서버가 제공하는 웹 서비스를 사용자가 볼 수 있게 바꾸어주는 클라이언트 프로그램이다. (구글 크롬, 오페라, 파이어폭스, IE 등)
출처