SOAP란 REST 아키텍쳐 방식이 대중화되기전 사용되던 XML 기반의 메시지 교환 프로토콜이다.
HTTP URI와 HTTP Method를 사용하는 REST API와 다르게 SOAP는 다음과 같은 특징을 가진다.
오늘날에는 데이터의 보안이 중요한 금융 서비스등에서만 SOAP를 이용한다.
그 이유는 REST와 SOAP의 특징이 다르기 때문이다.
SOAP : WS-Security, SSL등 내장되어 있는 보안 기능을 활용할 수 있다.
REST : HTTPS, JWT 등의 외부 보안 매커니즘을 가져와 사용할 수 있다.
SOAP : XML만을 지원한다.
REST : XML, HTML, JSON 등 다양한 형식을 지원한다.
SOAP : XML을 사용하기 때문에 더 많은 대역폭이 필요하다.
REST : JSON을 주로 사용해 상대적으로 적은 대역폭을 사용한다.
SOAP : Stateful로 세션을 유지해 복잡한 트랜잭션 처리에 용이하다.
REST : Stateless로 높은 확장성을 가진다.
상태성면에서 봤을때 SOAP가 연속적이고 복잡한 트랜잭션의 처리나 그에 따른 데이터의 무결성을 더욱 잘 유지할 수 있다.
따라서 일반적인 웹 서비스에선 REST가 대중화 되어있지만,
금융거래나 엔터프라이즈 환경에서는 SOAP가 더 적합할 수 있다.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<auth>
<username>user123</username>
<apiKey>abc123xyz789</apiKey>
</auth>
</soap:Header>
<soap:Body>
<getUserRequest>
<userId>12345</userId>
</getUserRequest>
</soap:Body>
</soap:Envelope>
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<getUserResponse>
<user>
<id>12345</id>
<name>홍길동</name>
<email>hong@example.com</email>
<age>30</age>
<address>
<street>강남대로 123</street>
<city>서울시</city>
<country>대한민국</country>
</address>
</user>
</getUserResponse>
</soap:Body>
</soap:Envelope>
GET /api/users/12345 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Accept: application/json
{
"status": 200,
"data": {
"id": "12345",
"name": "홍길동",
"email": "hong@example.com",
"age": 30,
"address": {
"street": "강남대로 123",
"city": "서울시",
"country": "대한민국"
}
}
}