‘얄팍한 코딩사전 - SOAP (REST API가 대세가 된 이유)’을 기본으로 정리하였습니다.
Rest API가 대중화되기 전 주로 사용되었던 프로토콜인 SOAP에 대하여 Rest API와 비교하며 간단히 정리하였습니다.
Rest api에서는 http 메소드와 url로 요청들을 구분하였기 떄문에 요청의 내용에 따라 uri가 달라질 수 있지만, soap에서는 모든 요청이 지정된 한 url로 전달된다.

REST API의 요청과 응답 예시
SOAP의 요청과 응답 예시
데이터 타입
REST API - 다양한 형식이 사용될 수 있고 일반적으로는 JSON 타입이 주로 사용된다.
SOAP - XML 형식으로 요청을 보내고 응답을 받는다.
요청
REST API - HTTP 메소드와 URL을 이용하여 다양한 원하는 요청을 표현한다.
SOAP - XML 형식을 body에 담아보내는 POST가 주로 사용된다.

SOAP의 메시지는 envelope 태그로 시작하고 끝난다.
Header에는 메세지에 대한 인증, 트랜젝션, 기타 부가 정보 등을 선택적으로 담을 수 있다.
메세지의 본문, 핵심 정보, 예를 들어 호출하고자 하는 작업과 그에 필요한 매개변수 및 데이터가 담긴다.
즉, SOAP에서 각 요청이 원하는 바를 알기 위해서는 body를 살펴보면 된다.
REST API - data driven,대상이 어느 ‘자원’인가에 대해 url에 명시하여 중점을 준다.
SOAP - function driven, 어느 ‘서비스’를 요청하는지 메세지에 표현한다. 즉, 무엇을 하는 것인지에 대해서 동사를 포함한 문장으로 표현한다.
간단히 말해 SOAP으로 구현된 서비스의 사용 설명서이다.
엄격한 XML 형식으로 작성이 되어 있고 각 서비스가 어떻게 요청이 되고 응답되어야 하는지 상세하게 명시되어 있다.
REST API - API 문서와 같은 사용서가 있지만, API 문서는 개발자, 즉 사람이 프로그래밍을 할 때 참고할 수 있도록 만든 것이다.
SOAP - WSDL의 경우 프로그램이 읽으라고 작성한 문서이다.
SOAP의 경우, 요청의 내용이 복잡한 XML로 되어 있어서 이를 기준으로 캐싱을 하는 것이 용이하지 않다. 또한 모든 메세지가 POST로 진행되지만 HTTP의 POST는 일반적으로 캐싱되지 않기 때문이다.
보안이 중요한 경우 SOAP이 사용된다.
SOAP은 WS-Secutriy와 같은 보안 프로토콜을 지원하고 이는 메세지의 무경성과 기밀성을 인증한다. 이 때문에 주로 금융 거래, 정부 서비스 등 높은 보안 수준을 요구하는 곳에서 사용된다.
또한 트랜젝션을 안전하게 처리하는 프로토콜 또한 지원하므로 복잡하고 민감한 절차들이 진행되는 서비스에 적합하다.
REST API의 특징은 STATLESS, 즉 상태를 유지않는다. 반대로 SOAP은 필요에 따라서 상태를 유지한다. 이 때문에 여러 단계의 작업에서 이전 단계의 상태를 기억해야 하는 트랜젝션 작업에서 선호된다.
이러한 장점으로 복잡하고 민감한 로직을 처리하는 대규모 서비스에서 SOAP는 여전히 사용되고 있다.