RESTful Services - เทียบเท่า WSDL


96

ฉันได้อ่านเกี่ยวกับ REST และ SOAP และเข้าใจว่าเหตุใดการใช้ REST จึงมีประโยชน์มากกว่าการใช้โปรโตคอล SOAP อย่างไรก็ตามฉันยังไม่เข้าใจว่าเหตุใดจึงไม่มี "WSDL" เทียบเท่าในโลก REST ฉันเคยเห็นโพสต์ที่บอกว่า "ไม่จำเป็น" สำหรับ WSDL หรือว่ามันจะซ้ำซ้อนในโลก REST แต่ฉันไม่เข้าใจว่าทำไม การเชื่อมโยงทางโปรแกรมกับนิยามและสร้างคลาสพร็อกซีแทนการเข้ารหัสด้วยตนเองเสมอไปหรือไม่? ฉันไม่ได้ตั้งใจจะเข้าสู่การถกเถียงทางปรัชญาเพียงแค่มองหาเหตุผลที่ไม่มี WSDL ใน REST หรือทำไมจึงไม่จำเป็น ขอบคุณ.


4
ฉันมีคำถามเดียวกัน ดูเหมือนว่าจากมุมมองของลูกค้าบริการที่เงียบสงบจะใช้งานยากกว่าบริการ WSDL
w.donahue

4
สำหรับฉันแล้วดูเหมือนว่าถ้าคุณกำลังเปิดโปงอะไรง่ายๆคุณก็ไม่จำเป็นต้องมี WADL หรือ WSDL แต่ถ้าคุณกำลังเปิดเผยบางสิ่งที่ซับซ้อนเช่น SAP ... ฉันไม่สามารถเข้าใจได้ว่าไม่มีการสะท้อนและเนมสเปซบางอย่างเพื่อจัดการกับฟังก์ชันการทำงานมากมายเหลือเฟือ
Brain2000

ไม่สามารถถือว่าเมธอด HTTP OPTIONS "เทียบเท่า" ได้เนื่องจากควรให้ข้อมูลเกี่ยวกับวิธีการและพารามิเตอร์ที่มีอยู่ซึ่งจำเป็นสำหรับการดำเนินการที่เป็นไปได้หรือไม่
Dim13i

คำตอบ:


44

คำอธิบาย Web Application ภาษา (WADL) เป็นพื้นเทียบเท่ากับ WSDL สำหรับการให้บริการสงบ แต่มีเคยขัดแย้งอย่างต่อเนื่องไม่ว่าจะเป็นอะไรเช่นนี้เป็นสิ่งจำเป็นที่ทุกคน

Joe Gregorio ได้เขียนบทความดีๆเกี่ยวกับหัวข้อนั้นซึ่งควรค่าแก่การอ่าน


1
ขอบคุณ Joschi ฉันอ่านบทความ แต่ไม่พบว่าบทความที่สองน่าเชื่อเกินไป ประเด็นใดที่เขาพูดถึงคุณคิดว่ามีค่าที่สุด
skaz

1
อาจเป็นที่น่าสังเกตว่า. NET ยังมีวิธีเผยแพร่ข้อมูลเมตา ( msdn.microsoft.com/en-us/library/ms730243.aspx ) ด้วยเหตุนี้บริการ REST ส่วนใหญ่ที่ฉันได้เห็นได้รับการพัฒนาโดยไซต์ใหญ่ ๆ นั้นรวมถึงไคลเอนต์ที่ดาวน์โหลดได้ที่พัฒนาขึ้นสำหรับภาษาโปรแกรมหลัก ๆ (Java, .NET, PHP และอื่น ๆ ) ในความคิดของฉันสิ่งนี้สร้างภาระให้กับผู้ให้บริการมาก
dana

4
@dana: ดูเหมือนจะไม่ค่อยมีประเด็นในการเขียนบริการที่คุณต้องเขียนไคลเอนต์ด้วย?
BlueChippy

19

WSDL อธิบายถึงจุดสิ้นสุดของบริการ ไม่ควรเชื่อมต่อไคลเอ็นต์ REST กับปลายทางของเซิร์ฟเวอร์ (เช่นไม่ควรทราบล่วงหน้าใน URL) ไคลเอ็นต์ REST อยู่คู่กับชนิดสื่อที่ถ่ายโอนระหว่างไคลเอนต์และเซิร์ฟเวอร์

การสร้างคลาสโดยอัตโนมัติบนไคลเอนต์อาจเหมาะสมเพื่อรวมประเภทสื่อที่ส่งคืน อย่างไรก็ตามทันทีที่คุณเริ่มสร้างคลาสพร็อกซีรอบ ๆ การโต้ตอบกับบริการคุณจะเริ่มปิดบังการโต้ตอบ HTTP และเสี่ยงที่จะลดทอนกลับไปสู่โมเดล RPC


4
คุณช่วยอธิบายเพิ่มเติมอีกหน่อยได้ไหม ฉันกลัวว่าจะไม่เข้าใจ ขอบคุณ.
skaz

1
คลาสพร็อกซีเป็นวิธีตรวจสอบความถูกต้องของเครื่องในเวลาคอมไพล์ หากไม่มีคุณจะต้องเขียนเอกสารด้วยตนเองและ "การตรวจสอบความถูกต้อง" ตามการทดสอบเท่านั้น
Eric Grange

1
@EricGrange ... แต่ถึงกระนั้นวิธีนี้ก็ใช้ได้ผลดีกับเว็บจนถึงตอนนี้
Darrel Miller

1
@DarrelMiller ขึ้นอยู่กับสิ่งที่คุณเรียกว่า "ทำงานได้ดี" นี่เป็นเหมือนในยุค 80 ที่ทุกคนจะเขียนการเชื่อมต่อจากเอกสารกระดาษดังนั้นจึงใช้งานได้ แต่ "ดี"?
Eric Grange

4
รายละเอียดประเภทสื่อ @BlueChippy ได้รับการจัดการด้วยวิธีที่ล้าสมัย คุณจะพบตัวแยกวิเคราะห์ที่มีอยู่สำหรับข้อมูลจำเพาะหรือคุณไปอ่านข้อมูลจำเพาะและเขียนด้วยตัวเอง สิ่งสำคัญที่ควรทราบคือวัตถุประสงค์คือเพื่อให้ข้อกำหนดประเภทสื่อสามารถใช้ซ้ำได้ใน API การเขียนโปรแกรมแยกวิเคราะห์ใหม่สำหรับแต่ละ API จะเอาชนะประเด็นนี้ REST เมื่อทำถูกต้องจะเป็นประโยชน์ในระยะยาวของการวิวัฒนาการที่เป็นอิสระของไคลเอนต์และเซิร์ฟเวอร์
Darrel Miller

8

RSDL มีจุดมุ่งหมายเพื่อเปลี่ยนการพักผ่อนเหมือนไฮเปอร์มีเดียกล่าวอีกนัยหนึ่งคือมีข้อมูลมากกว่าตัวบอกบริการเช่น WSDL หรือ WADL ตัวอย่างเช่นมีข้อมูลเกี่ยวกับการนำทางเช่นไฮเปอร์เท็กซ์และไฮเปอร์ลิงก์

ตัวอย่างเช่นเมื่อได้รับทรัพยากรปัจจุบันคุณมีการเชื่อมโยง set os ไปยังทรัพยากรอื่นที่เกี่ยวข้อง

อย่างไรก็ตามฉันไม่พบ Rest Clients ที่รองรับรูปแบบนี้หรือ Rest Server Solutions ที่มีคุณสมบัติในการสร้างอัตโนมัติ

ฉันคิดว่ามีทางยาวสำหรับข้อสรุปเกี่ยวกับเรื่องนี้ ดูเรื่องยาว HTML และ W3C เทียบกับเบราว์เซอร์ฮ่า ๆ

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Rest เช่น Hypermedia โปรดดูที่: http://en.wikipedia.org/wiki/HATEOAS

หมายเหตุ: Roy Fielding ได้วิจารณ์แนวโน้มเหล่านี้ใน Rest Apis โดยไม่ใช้วิธี hypermidia: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

ข้อสรุปของฉัน: วันนี้ WADL เป็นเรื่องปกติมากขึ้นที่ Rest and Integration Frameworks เช่น Camel CXF รองรับ WADL (สร้างและใช้งาน) อยู่แล้วเนื่องจากคล้ายกับ WSDL ดังนั้นจึงเข้าใจง่ายที่สุดในกระบวนการย้ายข้อมูลนี้ (SOAP to REST)

มาดูบทต่อไป;)


8

การเชื่อมโยงทางโปรแกรมกับนิยามและสร้างคลาสพร็อกซีแทนการเข้ารหัสด้วยตนเองเสมอไปหรือไม่?

เห็นด้วยสุดใจนี่คือเหตุผลที่ฉันใช้Swagger.io

Swagger เป็นเฟรมเวิร์กโอเพนซอร์สที่ทรงพลังซึ่งได้รับการสนับสนุนโดยระบบนิเวศน์ขนาดใหญ่ของเครื่องมือที่ช่วยคุณออกแบบสร้างจัดทำเอกสารและใช้งาน RESTful API ของคุณ

โดยพื้นฐานแล้วฉันใช้ Swagger เพื่ออธิบายโมเดลจุดสิ้นสุดและอื่น ๆ จากนั้นฉันใช้เครื่องมืออื่น ๆ เช่นswagger-codegenเพื่อสร้างคลาสพร็อกซีแทนที่จะเข้ารหัสด้วยตนเอง

ดูเพิ่มเติม: RAML


ไม่ทราบว่า Swagger ยังทำเช่นนั้น คิดว่ามันเป็นเพียงเอกสาร / กรอบงานทั่วไปสำหรับ REST APIs
Robert Dundon

6

มี RSDL (ภาษาคำอธิบายการบริการที่สงบ) ซึ่งเทียบเท่ากับ WSDL URL ข้างล่างนี้อธิบายการปฏิบัติของตนhttp://en.wikipedia.org/wiki/HATEOAS และhttp://en.wikipedia.org/wiki/RSDL ปัญหาคือเรามีเครื่องมือมากมายในการสร้างโค้ดจาก wsdl เป็น java หรือย้อนกลับ แต่ฉันไม่พบเครื่องมือใด ๆ ในการสร้างโค้ดจาก RSDL


3

WSDL สามารถขยายได้เพื่อให้สามารถอธิบายจุดสิ้นสุดและข้อความได้ไม่ว่าจะใช้รูปแบบข้อความหรือโปรโตคอลเครือข่ายใดในการสื่อสาร

อย่างไรก็ตาม REST ใช้โปรโตคอลเครือข่ายโดยใช้คำกริยา HTTP และ URI เพื่อแสดงสถานะวัตถุ

WSDL จะบอกคุณ ณ สถานที่นี้หากคุณส่งข้อความนี้คุณจะต้องดำเนินการนี้และรับรูปแบบนี้กลับมาเป็นผลลัพธ์

ใน REST ถ้าฉันต้องการสร้างโปรไฟล์ใหม่ฉันจะใช้คำกริยาที่POSTมีเนื้อหา JSON หรือตัวแปรเซิร์ฟเวอร์ http ที่อธิบายโปรไฟล์ของฉันไปยัง URL/profile

POSTควรส่งคืน ID ที่สร้างฝั่งเซิร์ฟเวอร์โดยใช้รหัสสถานะ201 CREATEDและส่วนหัวLocation: *new_profile_id*(เช่น 12345)

จากนั้นฉันสามารถทำการอัปเดตเพื่อเปลี่ยนสถานะของการ/profile/12345ใช้คำกริยา HTTP POSTพูดว่าจะเปลี่ยนที่อยู่อีเมลหรือหมายเลขโทรศัพท์ เห็นได้ชัดว่าเปลี่ยนสถานะของวัตถุระยะไกล

GET จะคืนสถานะปัจจุบันของไฟล์ /profile/12345

PUT โดยปกติจะใช้สำหรับ ID ที่สร้างขึ้นจากฝั่งไคลเอ็นต์

DELETE, ชัดเจน

HEADได้รับสถานะโดยไม่ต้องคืนร่าง

ด้วย REST ควรจัดทำเอกสารด้วยตนเองผ่าน API ที่ออกแบบมาอย่างดีจึงใช้งานได้ง่ายขึ้น

นี่เป็นบทความที่ยอดเยี่ยมเกี่ยวกับ REST มันช่วยให้ฉันเข้าใจด้วย


2
ฉันจะยืนยันว่ามันเป็นข้อ จำกัด ของไฮเปอร์มีเดียของ REST มากกว่าข้อ จำกัด ของอินเทอร์เฟซที่เหมือนกันซึ่งขจัดความต้องการ WSDL
Darrel Miller

3
คุณค้นพบ "โปรไฟล์" ได้จากที่ไหน? คุณจะให้ความช่วยเหลือได้อย่างไรเมื่อแทนที่จะเป็นหนึ่งคุณมีหลายสิบคน บริการที่เหลือทั้งหมดต้องอาศัยเอกสารที่เขียนด้วยมือและ API ที่เขียนด้วยตนเองซึ่งใช้แรงงานมากและเกิดข้อผิดพลาดได้ง่าย
Eric Grange

1
ฉันเห็นด้วยกับ @EricGrange - คุณช่วยอธิบายได้ไหมว่าคุณรู้ได้อย่างไรว่าหน่วยงานใดที่คุณสามารถดำเนินการ CRUD (L) ได้ ... เว้นแต่จะมีใครเขียนไว้ที่ไหนสักแห่ง
BlueChippy

2

ข้อกำหนด WSDL 2.0 ได้เพิ่มการรองรับบริการเว็บ REST ด้วย สถานการณ์ที่ดีที่สุดของทั้งสองโลก ปัญหาคือ WSDL 2.0 ยังไม่รองรับเครื่องมือส่วนใหญ่ที่มีอยู่อย่างกว้างขวาง WSDL 2.0 แนะนำให้ใช้ W3C WSDL1.1 ไม่แนะนำ W3C แต่ได้รับการสนับสนุนอย่างกว้างขวางจากเครื่องมือและนักพัฒนา อ้างอิง: http://www.ibm.com/developerworks/library/ws-restwsdl/


0

Web Application Description Language (WADL) เป็นคำศัพท์ XML ที่ใช้เพื่ออธิบายบริการเว็บ RESTful

เช่นเดียวกับ WSDL ไคลเอนต์ทั่วไปสามารถโหลดไฟล์ WADL และติดตั้งทันทีเพื่อเข้าถึงฟังก์ชันทั้งหมดของบริการเว็บที่เกี่ยวข้อง

เนื่องจากบริการ RESTful มีอินเทอร์เฟซที่เรียบง่ายกว่า WADL จึงไม่จำเป็นสำหรับบริการเหล่านี้เนื่องจาก WSDL คือบริการ SOAP แบบ RPC

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.