REST API는 HTTP 프로토콜을 기반으로 하며, 자원을 고유한 식별자인 URI(Uniform Resource Identifier)로 표현합니다. 이를 통해 클라이언트는 URI를 이용하여 서버에게 자원에 대한 요청을 전송하고, 서버는 해당 자원의 상태를 HTTP 메서드(GET, POST, PUT, DELETE 등)를 이용하여 표현하여 응답합니다.
REST API는 아래와 같은 특징을 갖습니다.
Stateless: 클라이언트와 서버 간의 통신은 상태를 유지하지 않습니다. 각각의 요청은 독립적이며, 이전 요청과는 무관합니다.
Cacheable: 응답은 캐시될 수 있어야 합니다. 이를 통해 클라이언트는 동일한 요청에 대해 서버로부터 응답을 받지 않고, 로컬 캐시를 이용하여 처리할 수 있습니다.
Layered System: 클라이언트는 서버에 직접 접근하는 대신, 프록시 서버 등 다른 네트워크 계층을 이용할 수 있습니다.
Uniform Interface: 자원에 대한 요청은 URI로, 자원의 상태 전달은 HTTP 메서드를 이용합니다. 또한, 응답은 JSON, XML 등 특정한 포맷을 사용합니다.
Code on Demand: 서버에서 클라이언트로 코드를 전송하여 실행할 수 있습니다. 이는 클라이언트와 서버 간의 역할을 분리하여, 서버는 데이터만 관리하고 클라이언트는 프로그램 로직을 처리할 수 있도록 합니다.
REST API는 다양한 프로그래밍 언어와 플랫폼에서 쉽게 구현할 수 있으며, 인터넷에서 사용되는 대부분의 웹 API가 REST API를 따르고 있습니다.
REST API의 메시지를 읽는 것 만으로 메시지의 의도를 확실히 파악할 수 있습니다.(가독성 good)
또한 HTTP의 인프라를 그대로 사용하기 때문에 api사용을 위한 별도의 인프라 구축이 필요하지 않습니다.
클라이언트와 서버는 REST api를 이용해 정보를 주고 받습니다. stateless한 특징에 따라 서버는 클라이언트의 히스토리, 문맥을 유지할 필요가 없게 됩니다. 명확하게 표현하자면, 각자의 역할이 명확하게 나뉘어져 있다고 보면 됩니다.
이러한 점은 개발자의 업무량 감소 뿐만 아니라 플랫폼의 독립성 확장이라는 효과를 가져올 수 있습니다.
HTTP 프로토콜 서비스라는 요구만 충족이 된다면 더 다양한 플랫폼에서 원하는 서비스를 쉽고 빠르게 개발하고 배포를 할 수 있습니다.
REST API는 헤더 부분에 uri처리 메서드를 명시합니다. 이러써 필요한 데이터를 바디에 표현할 수 있습니다. 이는 특정 메서드의 세부 표현을 다양한 언어(json, xml)로 작성할 수 있는 장점이 있고, 헤더 표현의 가독성 향상이라는 효과도 가져다 줍니다.
REST API의 단점으로는
HTTP 메서드를 사용해 uri를 표현하기 때문에 다양한 인프라에서 사용이 가능하지만, 메서드 형태가 제한적이라는 단점도 함께 가지고 있고, 무엇보다 표준이 존재 하지 않습니다.
SOAP(Simple Object Access Protocol)는 그 자체로 프로토콜이며, 보안이나 메시지 전송 등에 있어서 REST보다 더 많은 표준들이 정해져있기 때문에 조금 더 복잡합니다. 이러한 표준들로 인해서 오버헤드가 많기는 하지만, 보안, 트랜잭션, ACID(원자성, 일관성, 고립성, 지속성)을 준수해야 하는 보다 종합적인 기능이 필요한 조직에게는 적합한 방식이 될 수 있습니다. 굳이 비교를 하자면, SOAP는 웹 서비스 시나리오에 적용하기에는 그다지 좋지 않기 때문에, 기업용 애플리케이션 등을 작업하는데 더 이상적이라고 말할 수 있습니다.
SOAP는 보안 수준이 엄격합니다. SOAP에서는 SSL도 지원하고 WS-Security라는 자체 표준의 보안 기능도 가지고 있지요. 따라서 은행용 모바일 앱처럼 보안 수준이 높아야 하거나, 신뢰할 수 있는 메시징 앱, 또는 ACID를 준수해야 하는 경우라면 SOAP 방식이 더욱 선호됩니다.
REST에서는 표준화된 메시징 시스템이 갖춰져 있지 않으며, 통신 장애가 있을 경우 재시도를 통해서만 조치할 수 있습니다. 반면 SOAP 표준에는 성공/반복 실행 로직이 규정되어 있기 때문에, SOAP API를 통해서 통신을 할 때 처음부터 끝까지 신뢰성을 제공합니다.
SOAP 표준에는 ACID 준수에 관한 사항이 있습니다. ACID를 준수하기 때문에 데이터의 변형을 줄여주고, 데이터베이스와의 상호작용에 대해서 사전에 정확하게 정하기 때문에 데이터의 무결성을 지켜주지요. ACID는 데이터 일관성을 위한 다른 방식들보다도 더 보수적이기 때문에, 금융 정보 등의 민감한 데이터를 주고받을 때 일반적으로 많이 사용됩니다.
원격 프로시저 호출. 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술. 분산 네트워크 환경에서 더 편하게 프로그래밍하기 위해 등장.
특징: 다양한 언어를 가진 환경에서 쉽게 확장, 비즈니스 로직에 집중하여 생산성을 증가 / 시스템과의 coupling
사용 사례: Facebook (Apache Thrift), Twitch (Twirp), 외부 API나 API 서비스가 아닌 내부 마이크로서비스에 적합
Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
필요한 데이터만 쿼리. 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적. 여러번 네트워크 호출을 할 필요 없이, 한번의 네트워크 호출로 쿼리를 처리 할 수 있음.
특징: 필요한 데이터만 반환할 수 있음. 프론트엔드-백엔드의 생산성 향상 / 러닝 커브, 캐싱 복잡성
사용 사례: 복잡한 시스템 및 마이크로서비스, 모바일 API