2012-01-24 33 views
15

Tôi nhận được lợi ích của việc thay đổi liên kết uris, nhưng đó thực sự không phải là câu hỏi này là gì.REST vs SOAP evolvability

Điều tôi ngụ ý là khả năng phát triển là thêm các tính năng mới vào dịch vụ hoặc sửa đổi (nếu có thể) các dịch vụ hiện có và thực sự là vậy.

SOAP không tệ như cộng đồng REST có xu hướng nói về nó khi nói đến khả năng phát triển. Ví dụ:

  1. Trong REST, chúng tôi có thể thêm liên kết mới trong SOAP, chúng tôi có thể thêm phương pháp mới. Cả hai loại các loại máy khách cũ sẽ tiếp tục làm việc với các dịch vụ mới.
  2. Trong REST chúng ta có thể thêm trường biểu mẫu mới và đặt giá trị mặc định - trong SOAP chúng ta có thể có đối số dịch vụ như một số lớp ServiceArgs và thêm trường mới vào ServiceArgs. Đó là xấu xí, nhưng nó hoạt động.

Ví dụ về khả năng evolvability khi khách hàng SOAP bị hỏng và bạn không thể làm gì, trong khi các máy khách REST xử lý tình huống một cách duyên dáng?

Cảm ơn!

Trả lời

18

SOAP là công nghệ dựa trên hợp đồng. Toàn bộ tương tác máy khách/máy chủ được viết và được mã hóa trong một tài liệu lớn (WSDL) và phải được cả hai bên đồng ý và tôn trọng để mọi thứ hoạt động. Nếu một trong hai bên quyết định thêm các đối tượng địa lý, phía bên kia phải "tiến hóa" trong bước khóa với nó. Cả hai bên là hoàn toàn kết hợp, tham gia ở hông, dán lại với nhau, kết hôn, bao giờ hết.

Cách tiếp cận điển hình để nâng cao các dịch vụ SOAP của bạn là tạo tài liệu WSDL mới cho các phiên bản dịch vụ mới, đồng thời duy trì các phiên bản cũ hơn. Một kỹ thuật khác là tạo một giao diện mới để chứa các phương thức mới và kế thừa từ phương thức cũ. Cách tiếp cận bạn mô tả trong # 1 là IMO phá vỡ các quy tắc SOAP, vì máy khách và máy chủ hiện sẽ sử dụng các hợp đồng khác nhau và nó chỉ hoạt động vì phụ gia thay đổi (như phương pháp mới) có thể được gắn vào giày và hầu hết thời gian mọi thứ sẽ hoạt động. Thời điểm ai đó thực hiện một sự thay đổi phá hoại sau đó hợp đồng của khách hàng sẽ không khớp với máy chủ và trò chơi kết thúc. Đó là một quá trình khó khăn để quản lý, đó là lý do tại sao hầu hết các tổ chức chọn tạo WSDL hoàn toàn mới cho mỗi phiên bản API mới.

REST không kỳ diệu làm cho tất cả các vấn đề này biến mất, nhưng nó giúp mọi thứ dễ dàng hơn để quản lý bằng cách không buộc bạn gộp toàn bộ "hợp đồng" của hệ thống phân phối vào một tạo phẩm. Bạn đang sử dụng HTTP? Tuyệt vời, sau đó bạn có thể sử dụng tất cả các tính năng HTTP tuyệt vời mà web cũng sử dụng: máy chủ proxy, URL, thương lượng nội dung, xác thực, v.v. Bạn muốn giao tiếp bằng cách sử dụng mã hóa JSON cũng như XML? Tự rút khỏi. Đó là tầm thường để làm trong REST bất cứ lúc nào, mà không ảnh hưởng đến khách hàng hiện tại. Bạn muốn bảo mật? Tốt, bắt đầu thử thách cho các thông tin xác thực bằng cách sử dụng hỗ trợ trong xây dựng của HTTP cho chính xác điều đó. Tất cả những điều này (HTTP, JSON, v.v.) được chuẩn hóa và được mô tả ở những nơi khác nhau và đó chính xác là như thế nào.

SOAP kết hợp giao thức truyền, thông tin vị trí, mô tả tải trọng, lựa chọn mã hóa và phương pháp RPC vào một tài liệu ginormous. Nếu bạn muốn thực hiện bất kỳ thay đổi nào trong danh sách đó, bạn cần một tài liệu mới. Tệ hơn nữa, một số thứ không thể thay đổi được.

REST phân tách những thứ đó ra sao cho các mảnh có thể phát triển độc lập. URL của bạn (hoặc "URI", chính xác hơn) được trả về khi chạy và giả sử khách hàng doesn't start to hardcode them có thể phát triển mà không có bất kỳ thay đổi nào cần thiết cho khách hàng. Các thay đổi bổ sung đối với loại phương tiện của bạn là tầm thường nếu tài liệu của bạn làm rõ rằng các trường mới có thể xuất hiện trong tương lai. Bạn cũng có tùy chọn phiên bản loại phương tiện, cho phép đồng tồn tại của v1/v2/v3 ... loại phương tiện trong hệ thống của bạn và khách hàng có thể chọn (sử dụng các tiêu đề AcceptContent-Type trong HTTP) họ muốn sử dụng.

Đã bao giờ nghe câu nói đùa về chủ sở hữu Porsche, những người mua một chiếc xe mới toanh mỗi khi gạt tàn đầy? Đó là SOAP. Điều gì nên là một sự thay đổi tầm thường đòi hỏi phải sửa chữa lớn. REST cung cấp cho bạn máy hút bụi. Bạn không cần phải sử dụng nó, nhưng nó chắc chắn là rẻ hơn.

+1

Cảm ơn câu trả lời mở rộng. Các dịch vụ SOAP rõ ràng ít phát triển hơn các dịch vụ RESTful. Tuy nhiên SOAP cho phép một số mức độ phát triển. Bạn không thể thay đổi định dạng và một số thứ khác, nhưng bạn có thể thêm các phương thức và đối số (với một mẹo nhỏ được mô tả ở trên). Như bạn nói, điều đó sẽ vi phạm các quy tắc SOAP, nhưng nó có quan trọng không? Nó hoạt động. Bạn cũng nói khi ai đó thực hiện một thay đổi phá hoại đối với dịch vụ SOAP thì trò chơi kết thúc. Nó cũng đúng với các dịch vụ RESTful. Nếu bạn thực hiện một thay đổi phá hoại đối với một loại phương tiện truyền thông và một khách hàng không thể tìm thấy một liên kết nó mong đợi nó là kaput là tốt. –

+3

Re: thêm phương pháp vào giao diện SOAP ("lừa"): có, nó hoạt động nhưng nó hoạt động vì may mắn, không phải do thiết kế. Đó là một kỹ thuật không được hỗ trợ. Với REST, kiến ​​trúc của bạn có thể phát triển bởi vì sự tiến hóa là cốt lõi đối với REST, không bị cấm ở mức cơ bản như với SOAP. Re: phá hoại thay đổi - chính xác trên cả hai tài khoản. Nó không phải là một cái gì đó bất kỳ khách hàng lập trình có thể đối phó với kỳ diệu. –

Các vấn đề liên quan