Tầm quan trọng ngày nay của SOAP là gì


51

Lần cuối tôi gặp một dịch vụ dựa trên SOAP là trong thời gian thực tập tại một công ty tài chính vào năm 2013. Đó là thời điểm tôi bắt đầu sự nghiệp trong lĩnh vực CNTT. Tôi nhớ có một số tài liệu nghiên cứu về SOAP trong một khóa học kỹ thuật của tôi. Ngoài ra, tôi đã không sử dụng SOAP nhiều trong suốt sự nghiệp của mình.

Tôi đang hỏi điều này vì câu hỏi "Sự khác biệt giữa SOAP và REST" xuất hiện trong một trong những cuộc phỏng vấn gần đây của tôi. Từ những gì tôi biết (và những gì tôi tìm thấy trên Google) SOAP là một giao thức có sự kết hợp chặt chẽ giữa máy khách và máy chủ để trao đổi thông tin có liên quan chặt chẽ với logic kinh doanh. Trong khi REST là kiến ​​trúc không trạng thái linh hoạt hơn để truyền dữ liệu.

Ai đó có thể vui lòng sửa cho tôi nếu tôi sai về sự khác biệt này giữa SOAP và REST không? Ngoài ra, tầm quan trọng ngày nay của SOAP là gì? Có phải mọi người vẫn đang phát triển các API dựa trên SOAP mới hay bây giờ chủ yếu là một di sản?




14
@gnat: Đối với những gì nó có giá trị, câu trả lời trong cả hai câu hỏi đó đều rất tệ.
Robert Harvey

7
Bạn đã bao giờ thực sự thấy một dịch vụ REST chưa? Tất cả những gì tôi thấy là "các dịch vụ web cuối cùng đã học được động từ HTTP nghĩa là gì". Tại sao chúng ta đột nhiên gọi HTTP REST?
Luaan

8
@Luaan: Không có gì bất ngờ về điều đó; mọi người đã lạm dụng thuật ngữ "REST" trong nhiều năm.
Cuộc đua nhẹ nhàng với Monica

Câu trả lời:


58

REST thực sự là một phong cách kiến ​​trúc. SOAP là một giao thức dữ liệu. Sự phân biệt là quan trọng; bạn không thể so sánh chúng trực tiếp.

Mục đích chính của REST là đại diện cho các tài nguyên trên Internetcung cấp các cơ chế để khám phá chúng. Ngược lại, SOAP được sử dụng để truyền dữ liệu có cấu trúc giữa các máy tính và đó là tất cả những gì nó thực sự làm.

Lưu ý rằng bạn không thực sự cần REST để tạo mối quan hệ máy khách / máy chủ giữa hai máy tính trên Internet. Tất cả những gì bạn cần là một cơ chế chuyển JSON hoặc XML và thậm chí bạn không cần điều đó nếu bạn sẵn sàng không tương thích với mọi người khác.

Tuy nhiên, SOAP đã không còn được ưa chuộng đối với các API mới, công khai, mặc dù nó vẫn được sử dụng phổ biến cho các ứng dụng B2B vì bạn có thể định nghĩa "hợp đồng dữ liệu" với nó. Các dịch vụ web JSON có ưu điểm là khá nhẹ và linh hoạt và vì Javascript nhận ra JSON nguyên bản, nên đây là một lựa chọn tự nhiên cho các trình duyệt.

Nhưng không ai trong số đó có liên quan nhiều đến REST, thực sự.

Đọc thêm
Có phải REST tốt hơn SOAP không? (bài viết tốt, mặc dù nó không chính xác gọi REST là giao thức).
Mô hình trưởng thành của Richardson


3
Tôi muốn nói rằng tính năng sát thủ của các dịch vụ web JSON chính xác là thực tế là các trình duyệt hỗ trợ kém cho XML và SOAP, trong khi chúng có (gần) hỗ trợ riêng cho JSON. SOAP có nhiều thứ phù hợp với nó, nhưng nếu bạn không thể thực hiện các yêu cầu AJAX đối với dịch vụ SOAP, thì nó đã chết. Javascript / JSON trở thành mẫu số chung thấp nhất của Internet, vì vậy bạn sẽ cần một lợi ích lớn không sử dụng nó, và SOAP không phải là rằng tốt hơn nhiều.
Luaan

3
@Luaan Tôi không nói các trình duyệt hỗ trợ kém cho XML. Trong thực tế, thật khó để có được bất kỳ tốt hơn so với làm một XML HttpRequest và truy cập một thuộc tính trong đó có một DOM phân tích cú pháp. Chỉ là nếu cái mà người ta muốn là một cấu trúc dữ liệu điển hình chứ không phải là một tài liệu, JSON đơn giản là phù hợp hơn, cho dù bạn đang ở trong trình duyệt hay trong bất kỳ môi trường nào khác.
André Paramés

4
Tất cả những gì bạn cần là một cơ chế chuyển JSON hoặc XML và thậm chí bạn không cần điều đó nếu bạn sẵn sàng không tương thích với mọi người khác. -1: Nếu bạn muốn kết nối máy khách và máy chủ, bạn chỉ cần một giao thức tùy ý mà cả hai bên đều hiểu rằng không có gì phải làm khi sử dụng xml, JSON hoặc tương thích với mọi người khác. Ngay cả khi sử dụng json hoặc xml cũng không đảm bảo rằng bạn tương thích với mọi người hoặc thậm chí là ai đó. Json và xml chỉ là định dạng dữ liệu.
Paul Wasilewski

6
@PaulWasilewski: Vâng, đó là những gì tôi đã nói. Đừng gác máy. Có một lý do tất cả mọi người sử dụng JSON; đó là một tiêu chuẩn. Sử dụng nó đảm bảo rằng bạn đang sử dụng một cái gì đó mà người khác có thể nhận ra.
Robert Harvey

3
@RobertHarvey, không, đó không phải là những gì bạn viết có lẽ bạn muốn nói. JSON là chuẩn vậy là gì? CSV, Protcol Buffers, BSON được chuẩn hóa cũng như nhiều thứ khác. Vì vậy, lý do tại sao mọi người đang sử dụng JSON rất đa dạng. Và thậm chí có một số người đang sử dụng JSON vì mọi người đang sử dụng JSON;)
Paul Wasilewski

29

REST bị giới hạn hơn nhiều so với SOAP, đó là điểm mạnh và lý do cho sự phổ biến của nó.

Trong SOAP, tập hợp các hoạt động được phép và tập hợp các kiểu dữ liệu được phép về cơ bản là vô hạn. SOAP là một giao thức thủ tục từ xa, mà bạn sử dụng để hiển thị API cục bộ trên mạng mà không mất bất kỳ độ trung thực nào. Điều này làm cho SOAP trở nên phổ biến trong môi trường doanh nghiệp nơi các hệ thống giao dịch phức tạp cần thiết để tương tác trên mạng mà không mất bất kỳ sự trung thực nào trên đường đi. Khả năng phong phú này cũng là sự suy giảm của SOAP, vì nó khiến API SOAP trở nên cồng kềnh để hiểu và sử dụng nó đòi hỏi phải có công cụ tự động dưới dạng thư viện máy khách WSDL và SOAP để hiểu mọi thứ. Hơn nữa, việc thể hiện sự phong phú đầy đủ của hệ thống cơ bản là không hấp dẫn trong các API đối mặt công khai, nơi bạn muốn cung cấp các tóm tắt cho phép bạn phát triển hệ thống cơ bản mà không phải phá vỡ hoặc phiên bản API của bạn.

REST + JSON trở nên phổ biến đặc biệt vì tính đơn giản của nó. Nó định nghĩa một tập hợp các thao tác giới hạn với một tập hợp các loại dữ liệu hạn chế, yêu cầu nhà thiết kế API phải thiết kế cẩn thận các khái niệm trừu tượng phù hợp với vốn từ vựng hạn chế này và thực sự suy nghĩ thông qua việc ánh xạ miền kinh doanh sang tài nguyên REST. API REST rất dễ hiểu và dễ sử dụng mà không cần bất kỳ công cụ đặc biệt nào. Đối với API hướng tới công chúng, nơi người dùng API của bạn có thể có tất cả các cấp độ kỹ năng và kiến ​​thức, đây chính xác là những gì bạn muốn, đó là lý do tại sao tất cả các API bạn thấy trên web đã chuyển sang REST. SOAP được chuyển sang các tình huống doanh nghiệp khi vẫn còn mong muốn và cần chia sẻ API phức tạp giữa các hệ thống. Tuy nhiên,

Về cơ bản, điều mọi người nhận ra là tập hợp các ràng buộc mà bạn phải áp dụng cho thiết kế API của mình để làm cho API đơn giản và đủ trừu tượng để có thể duy trì và dễ sử dụng chính xác là tập hợp các ràng buộc mà REST đưa ra, giúp vô hiệu hóa SOAP một cách hiệu quả lợi ích để lại cho bạn chỉ với nhược điểm của nó. Bạn có thể xây dựng API đơn giản hóa với SOAP, nhưng nó sẽ không bao giờ dễ sử dụng như REST, vì vậy trong thực tế, mọi người chỉ chọn REST.


4
Cuộc tranh luận đánh máy tĩnh so với động cũ, yay: D Neat và hard vs hacky và đơn giản, cuộc chiến không bao giờ kết thúc.
Luaan

@Luaan ... và năng động luôn thắng khi trao đổi dữ liệu. youtube.com/watch?v=ROor6_NGIWU
Jared Smith

6
@JaredSmith Tôi không đồng ý mạnh mẽ. Các hợp đồng được cho là phải tuân theo để cả hai điểm cuối ánh xạ dữ liệu chính xác, nếu bạn có thể làm điều đó thông qua xuất bản siêu dữ liệu thay vì các trang tài liệu dễ bị lỗi tại sao bạn lại không?
Drainke7707

1
REST thực tế là một giao thức; Luận án và tôn giáo là "phong cách kiến ​​trúc". Câu trả lời này so sánh chính xác phần còn lại thực tế với xà phòng thực tế.
bmargulies

1
Câu trả lời của bạn đã cho thấy rằng bạn không hiểu REST và bạn bình luận nhấn mạnh điều đó.
Paul Wasilewski

5

Bạn không thể so sánh REST và SOAP. REST là một kiểu kiến ​​trúc trong khi SOAP là một giao thức.

Thật không may, REST trở thành từ thông dụng đồng nghĩa với dịch vụ HTTP RESTful, có nghĩa là hiện thực hóa kiến ​​trúc theo kiểu REST với giao thức HTTP dưới dạng (ứng dụng).

REST dựa trên các nguyên tắc sau (các ràng buộc và các yếu tố) (trong ngoặc đơn thực hiện trong RESTful HTTP) [1] .

  • Không trạng thái (HTTP là một giao thức không trạng thái)
  • Tài nguyên (được xác định bởi các URI)
  • Giao diện thống nhất (Phương thức HTTP)
  • Đại diện (MIME-TYPE)
  • HATEOS (Siêu liên kết)
  • Bộ nhớ cache (Bộ đệm HTTP)

Mặt khác, nhiều người có nghĩa là bằng cách nói SOAP một dịch vụ web dựa trên WSDL và SOAP là một phần của kiến ​​trúc dịch vụ web W3C [2] .

  • SOAP được sử dụng làm giao thức để trao đổi thông tin (về cơ bản tên phương thức, tham số, giá trị trả về, kiểu dữ liệu, ...).
  • WSDL một ngôn ngữ định nghĩa giao diện để mô tả dịch vụ web.

Ý nghĩa ngày nay của SOAP * là gì?

SOAP là một tiêu chuẩn W3C và nó được sử dụng làm định dạng trao đổi thông tin trong các dịch vụ web của W3C. Các dịch vụ web đó là - đặc biệt là trong sự cường điệu của các SOA (kiến trúc hướng dịch vụ) vào khoảng năm 2008 (+ - 3 năm) - và (không may) vẫn được triển khai chủ yếu trong các ứng dụng doanh nghiệp.

Điều này có một số lý do. Trước đó, RESTful HTTP không được biết đến nhiều và nó đã bị hiểu lầm. Thật không may, nó vẫn bị hiểu lầm hãy xem các câu trả lời khác

[...] REST bị giới hạn hơn nhiều so với SOAP [...].

Mục đích chính của REST là thể hiện các tài nguyên trên Internet [...].

Ngoài ra, SOAP (và WSDL) là một phần của ngăn xếp giao thức dịch vụ web W3C cung cấp nhiều tiêu chuẩn hơn để triển khai Dịch vụ Web.

Có phải mọi người vẫn đang phát triển các API dựa trên SOAP mới hay bây giờ chủ yếu là một di sản?

Vì vậy, có, vẫn còn và cũng sẽ có các hệ thống trong tương lai đang sử dụng SOAP (ít nhất là trong các hệ thống doanh nghiệp, chủ yếu là đằng sau cánh cửa). Nhưng phần lớn đang cố gắng thực hiện một số loại "REST" ngày nay.

Ai đó có thể vui lòng sửa cho tôi nếu tôi sai về sự khác biệt này giữa SOAP và REST không?

Nói REST là kiến ​​trúc không trạng thái linh hoạt hơn để truyền dữ liệu không phải là một lời giải thích tốt. Nói đơn giản REST là một kiểu kiến ​​trúc với các ràng buộc và các yếu tố cụ thể. Trong đó SOAP là một giao thức trao đổi thông tin.

Giống như tôi đã viết bạn không thể so sánh chúng. Nhưng bạn có thể so sánh Dịch vụ web RESTful HTTP với Dịch vụ web SOAP / WSDL.


"Nhưng bạn có thể so sánh Dịch vụ web RESTful HTTP với Dịch vụ web SOAP / WSDL." Nhưng đó là những gì OP đang yêu cầu. Có ai trả lời chưa?
RoboJ1M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.