2010-11-09 3 views
9

나는 다양한 사이트를 보았고 제공하는 유일한 대답은 다음과 같다. - 안정된 웹 서비스는 (GET, POST, PUT, DELETE)와 같은 Http의 고유 한 방법을 사용한다. 반면 SOAP 웹 서비스는 고유 한 사용자 지정 메서드를 사용합니다. - 안정적인 웹 서비스는 각 서비스 메서드를 리소스로 처리하고 URI를 제공합니다.Restful 웹 서비스가 SOAP 기반 웹 서비스보다 어떻게 더 좋은가

그러나이 답변의 전체적인 중요성을 이해하지 못합니다. 왜 그렇습니까? 이러한 것들은 SOAP 기반 웹 서비스에 비해 커다란 이점을 제공합니다.

+0

가능한 복제본 : http://stackoverflow.com/questions/76595/soap-or-rest – michid

+0

의견이 있으십니까? 당신은 4 개의 아주 좋은 해답을 가지고 있습니다. – RPM1984

+0

@ RPM1984 : 그렇습니다. 다른 서비스에 대한 별개의 URL을 가지고 있으므로 매우 느슨하게 연결되어 있고 URL 구조 (www.somesite.com?query=something을 갖는 SOAP와는 다른 디렉토리)) 검색 엔진 친화적 인. :) – Anand

답변

10

REST는 자연스럽게 Web/Cloud API에 적합하고 SOAP은 분산 컴퓨팅 시나리오에 적합합니다.

웹 API를 잘 수행하는 데 매우 중요한 트래버스 할 복잡한 문서 (예 : XML, SOAP 헤더)가 없기 때문에 대역폭이 REST의 주요 이점입니다. JSON은 데이터 교환을 위해 널리 인정되고 단순한 표준이며, 브라우저와 클라이언트 코드에서 쉽게 읽을 수 있습니다. 이것이 대부분의 RESTful API (Yahoo가 좋은 예입니다)가 JSON을 제공하는 이유입니다.

REST는 XmlHttpRequest 객체에서 사용할 수 있지만, 다시 말해서 Web API의 AJAX 기능에 결정적인 역할을합니다.

물론 REST의 캐시 가능성 기능은 무시할 수 없습니다.REST는 HTTP를 기반으로하기 때문에 HTTP 패킷의 헤더 (만료)를 활용하여 브라우저에서 캐싱을 사용함으로써 HTTP (및 웹 자체)의 많은 의미를 이용할 수 있습니다. 효율성을 높이기 위해 gzip 압축과 같은 것은 말할 것도 없습니다. 성능 측면에서 볼 때, REST는 실제로 SOAP보다 뛰어나다.

SOAP의 경우 SOAP은 상태 저장 작업을 처리합니다. WS * 표준 (보안, 트랜잭션 등)은 분산 된 시나리오에서 상당히 일반적인 배관 구조를 처리합니다. 그것은 REST로 할 수 있지만 확실히 REST가 아닙니다. SOAP은 클라이언트와 서버 간의 운영 계약을 정의하는 데 실제로 유용합니다. 이는 분산 시나리오에서 매우 중요합니다.

내 생각에 (그리고 전체 SOAP 대 REST는 매우 유망하다.) 분산 컴퓨팅 시나리오에 SOAP를 사용하고 웹 API에 REST를 사용한다.

+0

@ RPM1984 : "REST의 캐시 가능성"이란 무엇을 의미합니까? – Cratylus

+0

@ user384706 - REST는 HTTP를 기반으로하기 때문에 응답에 캐시 헤더 (만료)를 추가하여 브라우저에서 캐시 할 수 있습니다. 응답 패킷 *은 캐시 가능성을 명시 적으로 나타냅니다. 이제는 ** 클라이언트 ** 캐싱이며 서버 캐싱과 혼동하지 마십시오. 왜 다시 내 주요 게시물은 REST for Web, SOAP for Distributed Computing입니다. – RPM1984

+0

또한 해설을 추가하여 그 설명을 추가합니다. – RPM1984

1

장점은 전술적인데, 당신이 할 수있는 모든 일을 다른 일에서 할 수는 있지만, 웹 서버는 SOAP 이전에 여기에 있었고 구성하기가 쉽기 때문에 종종 더 간단합니다. 예를 들어, 인증 등은 웹 서버가 처리 할 수 ​​있으며, 리다이렉션과로드 밸런싱 등도 가능합니다. 일반적인 SOAP 프레임 워크는 실제로 그러한 모든 것을 완벽하게 처리하지 못하고 성장 통증을 유발할 수 있습니다.

4

SOAP의 주요 문제점은 부풀어 있습니다. 더 많이할수록 기본값을 덜 사용할 수 있습니다. 이로 인해 간단한 방법으로도 WSDL을 다운로드 할 수 있습니다. 그런 다음 파서 (특정 구문 분석기는 항상 일반 용도보다 작음), 메시지 (URI가있는 DELETE 대신 전체 XML), 오류 처리기 (20-30KB의 XML을 서버에 보내고 50KB 오류 메시지로 응답, 행운을 읽고 읽고 이해합니다.)

구체적인 예 : SharePoint 서버에서 SOAP을 통해 문서 목록을 읽는 Java 코드가 너무 커서 Java 컴파일러에 컴파일 할 때 1GB의 RAM을 제공해야합니다.

Restful과 동일한 경우 몇 줄의 코드 만 있으면됩니다. 클라이언트에서는 GET list/some/url으로 요청을 작성해야합니다. 코드를 직접 작성해야하는 경우에도 WSDL을 컴파일하는 것보다 서버에서 구문 분석하는 것이 덜 효과적입니다.

+1

그것의 소리에서, 당신은 프레임 워크와 함께 정말 나쁜 경험을했습니다. SOAP은 일반적으로 REST보다 시작하기에 수동 코딩이 덜 필요합니다. 일반적으로 프레임 워크가 배관의 상당 부분을 자동화하기 때문입니다. WSDL의 크기는 클라이언트 측 프록시 생성에만 도움이되기 때문에 런타임 성능과 관련이 없어야합니다. –

+1

Axis를 사용했습니다. Java에 다른 것이 있습니까? 또한 큰 WSDL == 큰 요청 때문에 WSDL의 크기가 적절합니다. –

2

많은 사람들이 SOAP 레이어에 추가 된 복잡성으로 인해 과도한 오버 헤드로 간주하여 RESTful 웹 서비스를 제안하여 SOAP 기반 웹 서비스를 싫어합니다.
REST 프레임 워크에서 xml 메시지는 HTTP 페이로드에 직접 캡슐화되며 SOAP 봉투 (AJAX와 동일) 내부에 캡슐화되지 않습니다.
이렇게하면 구문 분석 오버 헤드가 크게 줄어 듭니다.
그러나 실제로는 실제 xml 메시지 페이로드와 관련이없는 추가 정보를 서버/클라이언트에 보내는 것이 필요합니다.
이렇게하면 HTTP 메시지를 통해 정보를 전송하는 방법을 찾을 수 있습니다.
이러한 정보를 전송할 필요가 있기 때문에 일부는 SOAP 기반 서비스가 그러한 요구를 용이하게한다는 주장에 반대합니다.

관련 문제