-
REST API란?API 2022. 2. 16. 19:13
REST API
REST란?
“representational State Transfer”의 약자.(대표 상태 전송)
웹에 존재하는 모든 자원(이미지, 동영상, DB)에 고유한 URL을 부여하여 활용하는 것.
자원을 정의하고 자원에 대한 주소를 지정하는 방법론이다.
자원의 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것.
REST 구성 요소
1. 자원(Resource), URL
모든 자원은 고유한 ID를 가지며 ID는 서버에 존재하고 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다. HTTP에서 이러한 자원을 구별하는 ID는 student/1 과 같은 HTTP URL이다.
2. 행위(Verb), Method
클라이언트는 URL을 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용한다.
HTTP 프로토콜에서는 GET, POST, DELETE 같은 Method를 제공한다.
3. 표현(Representation)
클라이언트가 서버로 요청을 보냈을 때 응답 자원의 상태를 Representation이라고 한다.
REST에서 하나의 자원은 JSON, XML, RSS등 여러 형태의 Representaion으로 나타낼 수 있다.
REST가 왜 필요한가?
REST API의 목적은 이해하기 쉽고 사용하기 쉬운 API를 제작하는데에 있다.
- GET /deleteUserInfo/id?=3
- DELETE /users/3
두 요청은 모두 특정 user의 정보를 삭제하는 API이다.
하지만 1번 API는 restful하지 못하다.
컨벤션 조차도 일관적이지 않을 수 있다.
이후 API의 이해도를 떨어트릴 수 있으며, 확장성도 없다.
REST API를 사용한다고 해서 성능이 향상되지는 않는다.
일관적인 컨벤션과 API의 이해도 및 호환성을 높이는 것이 REST API의 목적이다.
REST 특징
Uniform (유니폼 인터페이스)
- Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
Stateless (무상태성)
- REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
Cacheable (캐시 가능)
- REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
Self-descriptiveness (자체 표현 구조)
- REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것이다.
Client - Server 구조
- REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
계층형 구조
- REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
RESTful 이란
REST 아키텍처를 구현하는 웹 서비스를 나타내기 위해서 사용되는 용어이다.
REST원리를 따르는 시스템을 RESTful이라는 용어로 지칭한다.
RESTful API 특징
- 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 한다.
- HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구축할 수 있다.
REST API Design Guide
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
Bad Example http://khj93.com/Running
Good Example http://khj93.com/run
2. 마지막에 슬래시 (/)를 포함하지 않는다.
Bad Example http://khj93.com/test/
Good Example http://khj93.com/test
3. 언더바 대신 하이폰을 사용한다.
Bad Example http://khj93.com/test_blog
Good Example http://khj93.com/test-blog
4. 파일확장자는 URI에 포함하지 않는다.
Bad Example http://khj93.com/photo.jpg
Good Example http://khj93.com/photo
5. 행위를 포함하지 않는다.
Bad Example http://khj93.com/delete-post/1
Good Example http://khj93.com/post/1
RESTful API를 위한 HTTP Methods
1. GET(조회)
자원을 받아오기만 할때 사용한다.
어떠한 방식으로도 자원의 상태를 변경시키지 않으므로, safe method라고 불리기도 한다.GET API는 멱등성의 띈다. 멱등성이란, 동일한 API를 여러번 호출시에도 동일한 결과를 얻을 수 있음을 의미한다.(POST, PUT을 통해 데이터가 변경되지 않는다면)
2. POST(생성)
새로운 자원을 추가할 때 사용한다.
이는 서버의 상태를 변경시키며, 때문에 비멱등성 성질을 가진다. 응답 코드로 201(Created)를 받아야 정상적으로 서버에 추가 되었음을 확인할 수 있다.
3. PUT(수정&생성)
존재하는 자원을 변경 할 때 사용한다.
만약 자원이 존재하지 않는 경우, API는 새로운 자원을 생성하도록 할 수 있다. 이 경우 응답코드는 201(Created)를 받게 된다.존재하는 자원을 변경시킨 경우 200(OK) 또는 204(No Content) 응답코드를 받게 된다.
POST VS PUT
POST는 여러개의 자원에 수행되는 반면, PUT은 단일 자원에만 수행된다.
4. DELETE(삭제)
자원을 삭제할 때 사용한다.
DELETE 메소드는 멱등성 성질을 띈다. DELETE 메소드를 요청하면 자원을 삭제하게 되는데, 반복적으로 DELETE를 호출한 경우 결과는 바뀌지 않는다. 하지만 이미 제거되었으므로404(NOT FOUND)를 반환받는다.
5. PATCH(일부수정)
한 자원의 데이터를 부분적으로 변경할 때 사용한다.
PUT도 마찬가지로 자원을 변경할 수 있다. 하지만 조금더 명확하게는 존재하는 자원에 대해 부분적으로 업데이트를 위해서는 PATCH를 사용한다. PUT은 자원을 완전히 대체하는 경우 사용한다.
- PATCH의 경우 모든 브라우저, 서버, 앱 어플리케이션 프레임워크에서 사용할 수 있는 것은 아니다.
참고 블로그