Tại sao một người sẽ sử dụng REST thay vì các dịch vụ dựa trên SOAP? [đóng cửa]


153

Tuy nhiên, đã tham dự một bản demo thú vị trên REST ngày hôm nay, tuy nhiên, tôi không thể nghĩ ra một lý do duy nhất (cũng không được trình bày) tại sao REST lại sử dụng và thực hiện tốt hơn hoặc đơn giản hơn so với ngăn xếp Dịch vụ dựa trên SOAP.

Một số lý do Tại sao mọi người trong "thế giới thực" sử dụng REST thay vì Dịch vụ dựa trên SOAP?


37
Bởi các dịch vụ web bạn đang đề cập đến các dịch vụ web theo phong cách SOAP? Bởi vì theo như tôi biết thì bạn cũng có thể có các dịch vụ web RESTful.
James McMahon

Câu trả lời:


160

Ít chi phí hơn (không có phong bì SOAP để kết thúc mọi cuộc gọi)

Ít trùng lặp (HTTP đã đại diện cho các hoạt động như XÓA, PUT, GET, v.v. mà phải được trình bày trong một phong bì SOAP).

Chuẩn hơn - Các hoạt động HTTP được hiểu rõ và hoạt động nhất quán. Một số triển khai SOAP có thể bị phạt.

Nhiều người có thể đọc và kiểm tra hơn (khó kiểm tra SOAP hơn chỉ bằng trình duyệt).

Không cần sử dụng XML (bạn cũng không cần phải dùng SOAP nhưng hầu như không có ý nghĩa gì vì bạn đã thực hiện phân tích cú pháp của phong bì).

Các thư viện đã làm cho SOAP (loại) dễ dàng. Nhưng bạn đang trừu tượng đi rất nhiều dư thừa bên dưới như tôi đã lưu ý. vâng, trên lý thuyết, SOAP có thể vượt qua các phương tiện vận chuyển khác để tránh việc cưỡi trên một lớp làm những việc tương tự, nhưng thực tế chỉ là về tất cả các công việc SOAP bạn sẽ làm là qua HTTP.


1
Tôi muốn thêm rằng giao tiếp SOAP giữa các nền tảng cũng có thể là một PITA (không phải là một phần của quan điểm của SOAP?!?).
Justin Bozonier

7
Cũng hoạt động rất tốt với cơ sở hạ tầng HTTP - ví dụ: GET được lưu trữ mạnh mẽ cùng với việc sử dụng các sửa đổi và khắc phục cuối cùng
James Strachan

Làm việc tuyệt vời với các trình duyệt web để cung cấp ứng dụng khách phổ biến cho các dịch vụ của bạn cũng giúp :)
James Strachan

2
Tôi sẽ tranh luận rằng SOAP được tiêu chuẩn hóa tốt. Nếu bạn có nghĩa là việc triển khai là chưa trưởng thành thì có lẽ cũng nên làm cho điều đó rõ ràng hơn. Tôi sẽ đánh giá một số bằng chứng cho quan điểm này nếu bạn đề xuất điều này. Tôi cũng sẽ hỏi liệu REST có dễ đọc hơn không, điều này phụ thuộc hoàn toàn vào cách bạn chọn định dạng nội dung của mình. Và cũng nên nhớ XML được thiết kế để con người có thể đọc được, mặc dù dài dòng như chúng ta đều biết.
Howard ngày

6
HTTP cũng được chuẩn hóa như SOAP và đã tồn tại lâu hơn nên việc triển khai thực sự ổn định trên bảng và thực sự tương thích. SOAP vốn dĩ sẽ ít được đọc hơn ngay cả khi có nội dung giống hệt nhau, vì phong bì chứa nội dung. Trong thực tế trong vài năm qua tôi đã tìm thấy JSON qua HTTP là sự kết hợp tốt nhất, chỉ cần đọc là đủ thậm chí gọn hơn.
Kendall Helmstetter Gelner

36

Các dịch vụ RESTful đơn giản hơn nhiều để tiêu thụ so với các dịch vụ dựa trên SOAP (thông thường). Lý do cho điều này là REST dựa trên các yêu cầu HTTP thông thường cho phép suy ra ý định từ loại yêu cầu được thực hiện (GET = retrive, POST = write, DELETE = remove, v.v.) và hoàn toàn không trạng thái. Mặt khác, bạn có thể lập luận rằng nó kém linh hoạt hơn vì nó không phù hợp với khái niệm phong bì thư chứa bối cảnh yêu cầu.

Theo kinh nghiệm của tôi, SOAP đã được ưu tiên cho các dịch vụ trong doanh nghiệp và REST được ưu tiên cho các dịch vụ được hiển thị dưới dạng API công khai.

Với các công cụ như WCF trong .NET framework, việc triển khai một dịch vụ là REST hoặc SOAP là rất nhỏ.

Một số bài đọc liên quan:


9
Tôi hiểu rằng các tệp WSDL có thể được sử dụng để tạo các lớp để hiển thị các phương thức dịch vụ web. Chắc chắn điều này làm cho việc tiêu thụ các dịch vụ dễ dàng như gọi một chức năng? Bạn có thể giải thích quan điểm của bạn một số xin vui lòng.
Howard ngày

1
Howard May: Giả sử bạn gọi các hàm chỉ sử dụng các kiểu dữ liệu nguyên thủy, điều này chắc chắn là đúng. Nhưng trong trường hợp đó, bạn không thể tranh luận chính xác SOAP dễ hơn nghỉ ngơi. Nếu bạn có kiểu dữ liệu phức tạp, xử lý WSDL có thể hoạt động tốt giữa hai máy có cùng ngăn xếp WS. Nhưng chắc chắn bạn sẽ gặp vấn đề ngay khi bạn trộn các ngăn xếp. Sẽ không dễ dàng như vậy một khi bạn phải đào sâu vào WSDL bằng tay để gỡ lỗi không tương thích.
Joseph Holsten

1
Trong năm 2014, hầu hết mọi nền tảng, ngay cả những nền tảng cổ xưa đều hỗ trợ WSDL. Các lớp proxy làm cho việc sử dụng API cực kỳ đơn giản. Chúng tôi đang triển khai dịch vụ đẩy và tôi đang xem xét REST, nhưng tôi thực sự gặp khó khăn khi thấy bất kỳ lợi ích nào.
JohnOpincar

13

Tôi sẽ cho rằng khi bạn nói "dịch vụ web", bạn có nghĩa là SOAP và bộ tiêu chuẩn WS- *. (Nếu không, tôi có thể lập luận rằng các dịch vụ REST "dịch vụ web".)

Đối số chính tắc là các dịch vụ REST phù hợp hơn với thiết kế web - nghĩa là thiết kế HTTP và cơ sở hạ tầng liên quan. Do đó, sử dụng dịch vụ REST sẽ tương thích hơn với các công cụ và kỹ thuật web hiện có.

Tất nhiên, một khi bạn đi sâu vào chi tiết cụ thể, bạn phát hiện ra rằng cả hai phương pháp đều có điểm mạnh trong các kịch bản khác nhau. Có phải đó là những chi tiết cụ thể mà bạn quan tâm?


10

Chi phí không quan trọng bằng kiến ​​trúc tốt.

REST không phải là một giao thức, nó là một kiến ​​trúc khuyến khích thiết kế có khả năng mở rộng tốt. Nó thường được chọn vì quá nhiều tự do trong RPC có thể dễ dàng dẫn đến một thiết kế kém.

Lý do khác là chi phí dự đoán của các giao thức RESTful qua HTTP vì nó có thể tận dụng các công nghệ hiện có (chủ yếu là proxy). Chi phí ban đầu của RPC khá thấp nhưng nó có xu hướng tăng đáng kể khi tăng cường tải.


7

REST không rõ ràng về triển khai và minh bạch hơn nhiều và điều này rất phù hợp với các API công khai, đặc biệt đối với các trang web lớn như Flickr, Amazon hoặc Digg đang sử dụng API của họ làm công cụ tiếp thị và thực sự muốn mọi người sử dụng dữ liệu của họ. Họ không muốn nắm giữ 1000 nhà phát triển người mới đang cố gắng gỡ lỗi ngôn ngữ kịch bản của thư viện SOAP lỗi của họ.

Versus SOAP và WSDL, tốt hơn cho các ứng dụng nội bộ, nơi bạn có thư viện thả vào và những người hiểu biết ở cả hai đầu. (Và bạn có thể không phải quan tâm đến những thứ như cân bằng tải trên quy mô Internet, bộ đệm HTTP, v.v.)


Một câu trả lời hay, nhưng tôi không đồng ý rằng SOAP có nghĩa là bạn không thể cân bằng tải trên quy mô internet.
HDave

7

Phải đọc luận văn xuất sắc nhất của Roy Fielding về chủ đề này. Anh ấy làm một trường hợp xuất sắc và chắc chắn là CÁCH trước thời điểm anh ấy viết nó (2000).



5

REST cho phép các hoạt động không biến đổi của bạn (thường sử dụng động từ GET) được lưu trữ . Đó là, được lưu trữ bởi máy khách và / hoặc được lưu trữ bởi proxy. Đây có thể là một chiến thắng rất lớn!


8
Đó chỉ đơn giản là "sử dụng HTTP chính xác" chứ không phải REST.
aehlke

3

REST về cơ bản chỉ là một cách để thực hiện các dịch vụ web. Đây chỉ là một cách sử dụng HTTP chính xác để truy vấn các dịch vụ web mà bạn đang cố gắng truy cập.

http://www.xfront.com/REST-Web-Service.html http://en.wikipedia.org/wiki/Repftimeation_State_Transfer


1
REST không liên quan gì đến HTTP và hoàn toàn độc lập với giao thức. Nó rất phù hợp cho một số loại dịch vụ web tập trung vào tài nguyên.
aehlke

0

Nó là siêu đơn giản và mỏng. Bạn có thể làm điều đó với trình duyệt qua động từ http: GET. Tôi không tìm thấy trình duyệt có thể thực hiện thủ công http POST chung một cách dễ dàng


1
Thanh toán Fiddler. Đây không phải là một trình duyệt nhưng đó là một cách tuyệt vời để xây dựng HTTP POST mà không cần mã. fiddler2.com/fiddler2
Eric Schoonover

Tôi thường làm điều đó với việc sửa đổi yêu cầu hiện có với Charles. Tôi cũng có Fiddler.
Ray Lu

0

Đây là một điểm dữ liệu: Amazon cung cấp API của mình ở cả định dạng REST và SOAP và 85% sử dụng là REST.

REST dễ thực hiện hơn, dễ hiểu hơn và hiệu suất cao hơn.


7
Bạn có bất kỳ tài liệu tham khảo cho tuyên bố "hiệu suất cao hơn" của bạn?
James McMahon

3
Bạn đã sử dụng 85% ở đâu? Điều này là rất tốt để biết (nếu tôi có thể thấy bằng chứng)
schmoopy

3
Đọc thủ công đặc tả API, in trang, v.v ... có dễ thực hiện hơn "Nhấp chuột phải, Thêm tham chiếu dịch vụ" không? (VS2010)
BlueChippy

@schmoopy Từ blog của Amazon: aws.typepad.com/aws/2005/09/rest_vs_soap.html
tham gia
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.