2008-09-18 18 views
146

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 phải là một trình bày) tại sao REST là tốt hơn hoặc đơn giản hơn để sử dụng và thực hiện hơn một dịch vụ dựa trên SOAP stack.Tại sao một người sử dụng REST thay vì các dịch vụ dựa trên SOAP?

Một số lý do Tại sao bất kỳ ai trong "thế giới thực" sử dụng REST thay vì các dịch vụ dựa trên SOAP?

+36

Dịch vụ web là bạn đề cập đến các dịch vụ web kiểu SOAP? Bởi vì theo tôi biết bạn cũng có thể có các dịch vụ web RESTful. –

Trả lời

152

Ít overhead (không phong bì SOAP để quấn mỗi gọi)

Ít trùng lặp (HTTP đã đại diện cho các hoạt động như DELETE, PUT, GET, vv mà phải bằng cách khác được biểu diễn trong một phong bì SOAP).

Các hoạt động HTTP chuẩn khác được hiểu rõ và vận hành nhất quán. Một số triển khai SOAP có thể trở nên khó khăn.

Nhiều người dễ đọc và có thể kiểm tra (khó kiểm tra SOAP chỉ với trình duyệt).

Không cần phải sử dụng XML (bạn cũng không cần phải làm như vậy cho SOAP, nhưng nó hầu như không có ý nghĩa vì bạn đã làm phân tích cú pháp của phong bì).

Thư viện đã tạo 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 ý. có trong lý thuyết SOAP có thể đi qua các phương tiện vận chuyển khác để tránh cưỡi trên đỉnh một lớp làm những việc tương tự, nhưng trong 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 liên nền tảng cũng có thể là một PITA (không phải là một phần của điểm SOAP?!?). –

+7

Cũng hoạt động 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 sửa đổi lần cuối và etags –

+0

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

2

REST về cơ bản chỉ là một cách để triển khai dịch vụ web. Nó chỉ là một cách để sử dụng HTTP một cách chính xác để truy vấn các dịch vụ web mà bạn đang cố gắng nhấn.

http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_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 thích hợp cho một số loại dịch vụ web tập trung vào tài nguyên. – aehlke

12

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

Luận điểm kinh điển là các dịch vụ REST phù hợp hơn với thiết kế web - đó là thiết kế của HTTP và cơ sở hạ tầng liên quan . Do đó, việc 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, khi bạn đi sâu vào chi tiết cụ thể, bạn sẽ thấy rằng cả hai cách tiếp cận đề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 không?

34

RESTful dịch vụ đơn giản hơn nhiều để tiêu thụ hơn SOAP dịch vụ dựa trên (thông thường). Lý do cho điều này là REST dựa trên các yêu cầu HTTP bình thường cho phép ý định được suy ra từ kiểu yêu cầu được thực hiện (GET = retrive, POST = write, DELETE = remove, etc ...) 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ó ít linh hoạt hơn vì nó không có khái niệm về một phong bì thư có chứa ngữ cảnh yêu cầu.

Trong kinh nghiệm SOAP của tôi đã đượ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 khuôn khổ .NET, nó rất tầm thường để thực hiện một dịch vụ như REST hoặc SOAP.

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

+9

Sự hiểu biết của tôi là 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 tiêu thụ của 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ố chi tiết xin vui lòng. –

+1

Howard May: Giả sử bạn gọi các hàm chỉ sử dụng kiểu dữ liệu nguyên thủy, điều này chắc chắn đúng. Nhưng trong trường hợp đó bạn không thể tranh luận chính xác SOAP dễ hơn là nghỉ ngơi. Nếu bạn có các kiểu dữ liệu phức tạp, việc xử lý WSDL có thể hoạt động tốt giữa hai máy có cùng các ngăn xếp WS. Nhưng bạn chắc chắn sẽ có vấn đề ngay sau khi bạn trộn ngăn xếp. Nó dừng lại quá dễ dàng 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. –

+1

Trong năm 2014, hầu như mọi nền tảng, thậm chí là nền tảng cũ, hỗ trợ WSDL. Các lớp proxy sử dụng API cực kỳ đơn giản. Chúng tôi đang thực hiện một 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

6

Got đọc Roy Fielding nhất tuyệt vời dissertation về chủ đề này. Ông làm cho một trường hợp tuyệt vời và chắc chắn là WAY trước thời hạn của mình khi ông viết nó (2000).

5

Steve Vinoski's blog và số latest articles của bạn chắc chắn đáng giá. Anh ta là một cựu guru của CORBA, người đã viết cuốn sách hay nhất về chủ đề này với Michi Henning, "Advanced CORBA® Programming with C++". Tuy nhiên, ông đã nhìn thấy lỗi của khách hàng/cách máy chủ của mình, và bây giờ thề bởi REST.

0

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

+1

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

+0

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

6

REST thực hiện thuyết minh và minh bạch hơn và điều này làm cho nó trở nên tuyệt vời cho các API công khai, đặc biệt là cho 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 tiêu thụ dữ liệu của họ. Họ không muốn được cầm tay 1000 người phát triển mới làm quen, những người đang cố gắng gỡ lỗi ngôn ngữ kịch bản của họ trong thư viện SOAP lỗi của sự lựa chọn.

So với 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ả xuống và những người biết rõ về 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 Internet, bộ nhớ đệm HTTP, v.v.) Sau đó, bạn nhận được các API tự tài liệu, lưu giữ các loại, v.v. với công việc 0.

+0

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ó cân bằng tải trên internet. – HDave

4

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) là được lưu trong bộ nhớ cache. Đó 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 lớn!

+8

Điều đó đơn giản là 'sử dụng HTTP đúng cách' và không phải REST. – aehlke

9

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

REST không phải là 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 thiết kế kém.

Lý do khác là chi phí dự đoán được của 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 là khá thấp nhưng nó có xu hướng tăng đáng kể với sự tăng cường tải trọng.

0

Đây là một điểm dữ liệu: Amazon cung cấp các API của nó trong cả hai đị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ỳ tham chiếu nào cho tuyên bố "hiệu suất cao hơn" của mình không? –

+3

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

+3

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