RESTful API란?
RestAPI(RESTful API)란 REST아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스이다.
전반적인 이해를 위해 REST와 RESTful의 개념에 대해서 설명하겠습니다.
REST란
REST의 정의
"Representational State Transfer"의 약자
월드 와이드 웹(www)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
- REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
- REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
REST의 구체적인 개념
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(Post, Get, Put, Delete)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
- 즉, REST는 자원 기반의 구조(ROA, Resource Oreiented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미한다.
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
REST 장단점
- 장점
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소하해준다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.(Hypermedia란 하나의 컨텐츠가 텍스트나 이미지, 사운드와 같은 다양한 포맷의 컨텐츠를 링크하는 개념이다.)
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
- 단점
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header값이 왠지 더 어렵게 느껴진다.
- 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.
- 장점
REST가 필요한 이유
- '애플리케이션 분리 및 통합'
- 다양한 클라이언트의 등장
- 최근의 서버 프로그램은 다양한 브라우저와 안드로이드, 아이폰과 같은 모바일 디바이스에서도 통신이 가능해야한다.
REST의 구성 요소
- 자원(Resource):URI
- 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
- 자원을 구별하는 ID는 HTTP URI다. (ex. '/groups/:group_id')
- Client는 URI를 이용해서 자원을 지정하고 해당 자원의 정보에 대한 조작을 Server에 요청한다.
- 행위: HTTP Method
- HTTP 프로토콜의 Method를 사용한다.
- HTTP 프로토콜은 GET, POST, PUT, DELELE, HEAD와 같은 메서드를 제공한다.
- 표현(Representation of Resource)
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
- JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
- 자원(Resource):URI
REST 특징
- Server-client구조
- Stateless(무상태성) -> 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
- Cacheable(캐시가능) -> REST의 가장 큰 특징은 HTTP라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 사용할 수 있다. 따라서 HTTP가 가진 캐싱 기능을 적용할 수 있다.
- Self-descriptiveness(자체 표현 구조) -> REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어 있다는 뜻
- 계층형 구조 -> REST 서버는 다중 계층으로 구성될 수 있으며, 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다.
- Uniform(유니폼 인터페이스) -> 특정 언어나 기술에 종속되지 않고 모든 플랫폼에 사용할 수 있으며, URI로 지정한 리소스에 대한 조작이 가능한 아키텍처 스타일을 의미한다.
REST API란
REST API
REST API의 정의
- REST 기반으로 서비스 API를 구현한 것
REST API의 특징
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
- 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
REST API 설계 규칙
- URI는 정보의 자원을 표현해야한다.
- 자원에 대한 행위는 HTTP Method(Get, Put, Post, Delete 등)로 표현한다.
- 소문자 사용 (최소한 대소문자 구분)한다.
- 슬래시 구분자는 계층 관계를 나타내는데 사용한다. (ex. '/groups/:group_id')
- URI의 마지막 문자로 슬래시를 포함하지 않는다.
- 하이픈(-)은 URI 가독성을 높이는데 사용한다.
- 밑줄(_)은 URI에 사용하지 않는다.
RESTful
RESTful 의 개념
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서시브를 나타내기 위해 사용되는 용어이다.
-> 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.
RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
RESTful의 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- RESTful API를 구현하는 근본적인 목적이 퍼포먼스 향상에 있는게 아니라, 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는게 주 동기이니, 퍼포먼스가 중요한 상황에서는 굳이 RESTful API를 구현할 필요는 없다.
RESTful 하지 못한 경우
- CRUD 기능을 모두 POST로만 처리하는 API
- route에 resource, id외의 정보다 들어가는 경우
- 응답에 대한 메타데이터가 Body에 포함된 경우
- URL에 동사가 포함되어 있는 경우
- URL에 RPC 호출 메서드 명이 있는 경우 (ex. ?action=createReservation)
면접 예상 질문
1. REST란 무엇이고, RESTful 하게 API를 디자인한다는 것은 무엇인가요?
- REST는 Representational State Transfer의 약자입니다. 간단히 말해서 URI와 HTTP 메소드를 이용해 객체화된 서비스에 접근하는 것입니다.
- RESTful 하게 API를 디자인 한다는 것은 URI를 규칙에 맞게 잘 설계했는지의 여부입니다.(설계규칙을 참고하시면 됩니다.)
2.REST API를 사용하는 이유는 무엇인가요?
- 분산 시스템을 사용하기 위해서이다. 이를 사용하면 거대한 애플리케이션을 모듈, 기능별로 분리하기 쉬워지고 REST API를 서비스하면 어떤 다른 모듈 또는 애플리케이션이라도 상호간의 통신을 할 수 있기 때문이다.
3. HTTP Method의 종류에는 무엇이 있나요?
- 크게 GET, POST, PUT, DELETE, HEAD가 있다.
참고 자료
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html