Dịch vụ RESTful - Tương đương WSDL


94

Tôi đã đọc về REST và SOAP và hiểu tại sao việc triển khai REST có thể có lợi hơn so với việc sử dụng giao thức SOAP. Tuy nhiên, tôi vẫn không hiểu tại sao không có "WSDL" tương đương trong thế giới REST. Tôi đã thấy các bài đăng nói rằng "không cần" cho WSDL hoặc nó sẽ là thừa Trong thế giới REST, nhưng tôi không hiểu tại sao. Không phải luôn hữu ích khi liên kết theo chương trình với một định nghĩa và tạo các lớp proxy thay vì viết mã theo cách thủ công? Tôi không có ý định tham gia vào một cuộc tranh luận triết học, chỉ tìm lý do không có WSDL trong REST hoặc tại sao nó không cần thiết. Cảm ơn.


4
Tôi có cùng một câu hỏi. Có vẻ như từ quan điểm của khách hàng, các dịch vụ an toàn khó sử dụng hơn nhiều so với dịch vụ WSDL.
w.donahue

4
Đối với tôi, có vẻ như nếu bạn đang phơi bày một thứ gì đó đơn giản, thì bạn không cần WADL hoặc WSDL. Nhưng nếu bạn đang phơi bày một thứ gì đó phức tạp như SAP ... Tôi không thể hiểu là không có một số loại phản chiếu và không gian tên để xử lý rất nhiều chức năng.
Brain2000

Phương thức HTTP OPTIONS không thể được coi là "tương đương" vì nó phải cung cấp thông tin về các phương thức và tham số có sẵn cần thiết cho bất kỳ hành động nào có thể xảy ra?
Dim13i

Câu trả lời:


44

Các Mô tả Ứng dụng Web Ngôn ngữ (WADL) về cơ bản là tương đương với WSDL cho dịch vụ RESTful nhưng đã có một sự tranh cãi đang diễn ra cho dù một cái gì đó như thế này là cần thiết ở tất cả.

Joe Gregorio đã viết một bài báo hay về chủ đề đó rất đáng để đọc.


1
Cảm ơn Joschi. Tôi đã đọc các bài báo, nhưng không thấy bài thứ hai quá thuyết phục. Bạn thấy điểm nào mà anh ấy đề cập có giá trị nhất?
skaz

1
Nó có thể là đáng chú ý là NET cũng có một cách để công bố siêu dữ liệu ( msdn.microsoft.com/en-us/library/ms730243.aspx ). Như đã nói, hầu hết các dịch vụ REST mà tôi đã thấy được phát triển bởi các trang web lớn bao gồm nhiều loại máy khách có thể tải xuống được phát triển cho các ngôn ngữ lập trình chính (Java, .NET, PHP, v.v.). Theo tôi, điều này đặt ra rất nhiều gánh nặng cho nhà cung cấp dịch vụ.
dana

4
@dana: Có vẻ không có nhiều ý nghĩa trong việc viết một dịch vụ mà sau đó yêu cầu bạn cũng phải viết ứng dụng khách?
BlueChippy

19

WSDL mô tả các điểm cuối dịch vụ. Các máy khách REST không nên được kết hợp với các điểm cuối của máy chủ (tức là không nên biết trước về URL). Máy khách REST được ghép nối trên các loại phương tiện được truyền giữa máy khách và máy chủ.

Có thể có ý nghĩa khi tự động tạo các lớp trên máy khách để quấn quanh các loại phương tiện được trả về. Tuy nhiên, ngay sau khi bạn bắt đầu tạo các lớp proxy xung quanh các tương tác dịch vụ, bạn bắt đầu che khuất các tương tác HTTP và có nguy cơ thoái hóa trở lại mô hình RPC.


4
Bạn có thể nói rõ hơn một chút? Tôi sợ tôi không hiểu. Cảm ơn.
skaz

1
Các lớp proxy là một cách để xác thực máy tại thời điểm biên dịch. Không có chúng, bạn chỉ có tài liệu được viết thủ công và "xác thực" dựa trên thử nghiệm.
Eric Grange

1
@EricGrange ... và cách tiếp cận này đã hoạt động khá tốt cho web cho đến nay.
Darrel Miller

1
@DarrelMiller phụ thuộc vào cái mà bạn gọi là "hoạt động tốt", điều này giống như vào những năm 80 khi mọi người viết các phần tương tác của nó ra khỏi tài liệu giấy, vì vậy nó hoạt động, nhưng "tốt"?
Eric Grange

4
@BlueChippy Các thông số kỹ thuật loại Media được xử lý theo cách cũ. Bạn có thể tìm thấy một trình phân tích cú pháp hiện có cho thông số kỹ thuật, hoặc bạn đi đọc thông số kỹ thuật và tự viết. Điều quan trọng cần lưu ý là mục tiêu là để các thông số kỹ thuật của loại phương tiện có thể sử dụng lại trên các API. Viết một trình phân tích cú pháp mới cho mỗi API sẽ đánh bại quan điểm. REST khi được thực hiện đúng là vì lợi ích lâu dài của sự phát triển độc lập của máy khách và máy chủ.
Darrel Miller

8

RSDL nhằm mục đích biến phần còn lại giống như một siêu phương tiện, nói cách khác, nó có nhiều thông tin hơn một bộ mô tả dịch vụ như WSDL hoặc WADL. Ví dụ, nó có thông tin về điều hướng, như siêu văn bản và siêu liên kết.

Ví dụ, với một tài nguyên hiện tại, bạn có một tập hợp hệ điều hành liên kết đến một tài nguyên khác liên quan.

Tuy nhiên, tôi không tìm thấy Rest Clients hỗ trợ định dạng này hoặc Rest Server Solutions có tính năng tự động tạo.

Tôi nghĩ rằng còn một chặng đường dài để đưa ra kết luận về nó. Xem câu chuyện dài về HTML và W3C vs Trình duyệt lol.

Để biết thêm chi tiết về Rest like Hypermedia, hãy xem tại: http://en.wikipedia.org/wiki/HATEOAS

Lưu ý: Roy Fielding đã chỉ trích những xu hướng này trong Rest Apis mà không có phương pháp hypermidia: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Kết luận của tôi: Bây giờ là ngày, WADL phổ biến hơn là các Khung công tác tích hợp và khôi phục như Camel CXF đã hỗ trợ WADL (tạo và tiêu thụ), vì nó tương tự như WSDL, do đó dễ hiểu nhất trong quá trình di chuyển này (SOAP sang REST).

Đón xem các chương tiếp theo nhé;)


8

Không phải luôn hữu ích khi liên kết theo chương trình với một định nghĩa và tạo các lớp proxy thay vì viết mã theo cách thủ công?

Đồng ý hết lòng, đây là lý do tại sao tôi sử dụng Swagger.io

Swagger là một khung công tác mã nguồn mở mạnh mẽ được hỗ trợ bởi một hệ sinh thái lớn các công cụ giúp bạn thiết kế, xây dựng, lập tài liệu và sử dụng các API RESTful của mình.

Vì vậy, về cơ bản tôi sử dụng Swagger để mô tả các mô hình, điểm cuối, v.v. của mình, sau đó tôi sử dụng các công cụ khác như swagger-codegen để tạo các lớp proxy thay vì viết mã theo cách thủ công.

Xem thêm: RAML


Không biết Swagger cũng đã làm điều đó. Nghĩ rằng đó chỉ là tài liệu / khuôn khổ chung cho các API REST
Robert Dundon

6

Có một RSDL (ngôn ngữ mô tả dịch vụ ổn định) tương đương với WSDL. URL dưới đây mô tả hoạt động của nó http://en.wikipedia.org/wiki/HATEOAShttp://en.wikipedia.org/wiki/RSDL . Vấn đề là chúng ta có rất nhiều công cụ để tạo mã từ wsdl sang java hoặc ngược lại. Nhưng tôi không tìm thấy bất kỳ công cụ nào để tạo mã từ RSDL.


3

WSDL có thể mở rộng để cho phép mô tả các điểm cuối và thông điệp của chúng bất kể định dạng thông báo hoặc giao thức mạng nào được sử dụng để giao tiếp

Tuy nhiên, REST sử dụng giao thức mạng bằng cách sử dụng các động từ HTTP và URI để biểu thị trạng thái đối tượng.

WSDLs cho bạn biết tại nơi này, nếu bạn gửi tin nhắn này, bạn sẽ thực hiện hành động này và kết quả là định dạng này trở lại.

Trong REST, nếu tôi muốn tạo một hồ sơ mới, tôi sẽ sử dụng động từ POSTvới phần thân JSON hoặc các biến máy chủ http mô tả hồ sơ của tôi với URL/profile

POSTsẽ trả về ID được tạo từ phía máy chủ, sử dụng mã trạng thái 201 CREATEDvà tiêu đềLocation: *new_profile_id* (ví dụ: 12345)

Sau đó, tôi có thể thực hiện cập nhật thay đổi trạng thái /profile/12345sử dụng động từ HTTPPOST , chẳng hạn như thay đổi địa chỉ email hoặc số điện thoại của tôi. Rõ ràng là đang thay đổi trạng thái của đối tượng từ xa.

GET sẽ trả về trạng thái hiện tại của /profile/12345

PUT thường được sử dụng cho ID được tạo từ phía máy khách

DELETE, hiển nhiên

HEAD, nhận được trạng thái mà không cần trả lại cơ thể.

Với REST, nó sẽ tự lập tài liệu thông qua một API được thiết kế tốt và do đó dễ sử dụng hơn.

Đây là một bài báo tuyệt vời về REST. Nó thực sự giúp tôi hiểu nó quá.


2
Tôi cho rằng đó là ràng buộc siêu phương tiện của REST, hơn là ràng buộc giao diện thống nhất loại bỏ nhu cầu về WSDL.
Darrel Miller

3
Bạn khám phá "hồ sơ" ở đâu? Làm thế nào để bạn hỗ trợ khi thay vì một, bạn có hàng tá? Tất cả các dịch vụ còn lại đều dựa vào tài liệu viết tay và các API được viết thủ công, tốn nhiều công sức và dễ xảy ra lỗi.
Eric Grange

1
Tôi đồng ý với @EricGrange - vui lòng giải thích LÀM THẾ NÀO để bạn biết những thực thể nào bạn có thể thực hiện các thao tác CRUD (L) ON ... trừ khi ai đó viết nó ra ở đâu đó?
BlueChippy

2

Đặc tả WSDL 2.0 cũng đã hỗ trợ thêm cho các dịch vụ web REST. Kịch bản tốt nhất của cả hai thế giới. Vấn đề là WSDL 2.0 chưa được hỗ trợ rộng rãi bởi hầu hết các công cụ hiện có. WSDL 2.0 là W3C được khuyến nghị, WSDL1.1 không được W3C khuyến nghị nhưng được hỗ trợ rộng rãi bởi các công cụ và nhà phát triển. Tham khảo: http://www.ibm.com/developerworks/library/ws-restwsdl/


0

Ngôn ngữ Mô tả Ứng dụng Web (WADL) là một từ vựng XML được sử dụng để mô tả các dịch vụ web RESTful.

Như với WSDL, một ứng dụng khách thông thường có thể tải tệp WADL và được trang bị ngay lập tức để truy cập vào chức năng đầy đủ của dịch vụ web tương ứng.

Vì các dịch vụ RESTful có giao diện đơn giản hơn, WADL gần như không cần thiết đối với các dịch vụ này vì WSDL là các dịch vụ SOAP kiểu RPC.

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.