WCF Data Services (OData) เทียบกับ ASP.NET Web API หรือไม่ Hypermedia?


12

ฉันกำลังหาแอพพลิเคชั่นแบบกระจายซึ่งจะประกอบด้วยบริการ REST และไคลเอนต์ที่หลากหลาย (Silverlight, iOS, Windows Phone 7 และอื่น ๆ ) ฉันพร้อมที่จะตัดสินใจว่าจะใช้บริการ REST โดยใช้ WCF Data Services (OData) แต่ตอนนี้ MVC 4 Web API ทำให้ฉันตั้งคำถามกับการตัดสินใจว่า

สิ่งที่ฉันชอบเกี่ยวกับ OData คือความสามารถในการสืบค้น URI และไฮเปอร์มีเดียที่คุณได้รับฟรี สิ่งที่ฉันไม่ชอบคือความฟุ่มเฟื่อยของอัตราการโหลด OData; ตัวละครที่ไม่จำเป็นจำนวนมากเดินผ่านเส้นลวด

สิ่งที่ฉันชอบเกี่ยวกับ Web API คือ payloads มีความกระชับมากกว่าและมีความสามารถในการสอบถาม URI ของ OData แต่ดูเหมือนว่าขาดไฮเปอร์สื่อ (นอกกรอบอย่างน้อย) เจ้านายของฉันกำลังผลักดันเว็บ API เพราะ "พลังที่ Microsoft สนับสนุนอยู่และ OData ก็ไม่ได้รับแรงฉุด"

ดังนั้นฉันมีสองคำถาม:

1) ทุกคนสามารถแสดงความคิดเห็นในการสำรองข้อมูล / การฉุดของ Web API และ OData ได้หรือไม่?

2) Web API คาดว่าจะสนับสนุน hypermedia ตามเวลาที่วางจำหน่ายจริงหรือมีการใช้งานหรือตัวอย่างที่ฉันควรพิจารณาหรือไม่

ขอบคุณ!


2
คำตอบที่ดีสำหรับคำถามที่ 1 จนถึงตอนนี้ ใครมีความเข้าใจในคำถามที่สองของฉันบ้าง
Raymond Saltrelli

kinda พลาดเรื่องนั้นและฉันได้เห็นคำศัพท์ แต่ฉันไม่แน่ใจว่าไฮเปอร์มีเดียคืออะไรในด้านเทคนิค - คุณมีลิงค์หรือไม่?
ไวแอตต์บาร์เน็ตต์

2
โดยพื้นฐานแล้วไฮเปอร์มีเดียในบริบทของ REST หมายถึง "lazy load" ตัวอย่างเช่นหากคำขอของคุณไปยังบริการ REST จะส่งคืนวัตถุที่มีการอ้างอิงไปยังวัตถุอื่นการอ้างอิงนั้นจะแสดงเป็นลิงค์ในเอกสาร XML ซึ่งตรงกันข้ามกับการรวมวัตถุที่อ้างอิงในนั้นทั้งหมด หากคุณต้องการข้อมูลเกี่ยวกับวัตถุที่อ้างอิงเพียงแค่ไปที่ลิงค์ dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

1
อีกหนึ่งคำอธิบายที่ดีของสื่อสิ่งพิมพ์เกี่ยวกับ REST timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

คำตอบ:


2

เว็บ API สร้าง Odata ดูบล็อกโพสต์สกอตต์ของ Guthrie โดยเฉพาะ:

องค์ประกอบการสืบค้น: Web API ช่วยให้คุณสามารถสนับสนุนการสืบค้นผ่านการประชุม URL ของ OData ได้อย่างง่ายดาย เมื่อคุณส่งคืน IQueryable ประเภทใดก็ได้จาก Web API ของคุณกรอบงานจะให้การสนับสนุนแบบสอบถาม OData โดยอัตโนมัติซึ่งทำให้ง่ายต่อการปรับใช้เพจจิ้งและการเรียงลำดับ

ฉันยังคิดว่าในหลายกรณีคลาสเดียวกันอาจเป็นคลาส WCF แบบดั้งเดิมและคลาส Web API พวกเขาไม่ได้มีความพิเศษร่วมกันอย่างแน่นอน


2

Web API ใช้ประโยชน์จากโปรโตคอล http มากขึ้น Odata เป็นมาตรฐานแบบเปิดที่โอบล้อมด้วยผู้เล่นจำนวนมาก ฉันสามารถพูดได้จากประสบการณ์ของฉันที่เล่นกับ Odata และเพิ่งค้นพบ Web API และทำการวิจัย

OData เจ๋งเพราะเป็นมาตรฐานจริง คุณสามารถสร้างฐานข้อมูลและเปิดเผยผ่าน HTTP ได้อย่างง่ายดาย ซึ่งหมายความว่าคุณสามารถสำรวจโครงสร้างตารางของคุณโดยไม่มีการกำหนดค่าใด ๆ (ฉันพูดแบบนั้นหลวม ๆ ) นอกจากนี้คุณยังสามารถเรียกใช้แบบสอบถามผ่าน URL ซึ่งอาจรวมถึงแสง LINQ บางส่วน:

/products/orders/[put some linq-ish query here]

นี่เป็นเนื้อหาที่ดีหรือไม่ดี การรับรองความถูกต้องเป็นมาตรฐานและสร้างขึ้นมา

Web API น่าสนใจมากขึ้นจากมุมมองของฉัน มันใช้ฟังก์ชั่น HTTP (ข้อความแสดงข้อผิดพลาดและอื่น ๆ ) และเป็นบิต "ดั้งเดิม" สำหรับคำขอ RESTful จริง ฉันไม่ได้เล่นกับมันมากเกินไป .. แต่ฉันอ่านไปแล้วและมี "ได้ยิน" ที่ MVC และ Web API อาจ "แต่งงาน" สักวันหนึ่งอาจจะดีบางที ...

เมื่อฉันเล่นกับ OData ฉันสร้าง Stored Proc แมปเข้ากับพื้นผิวเอนทิตีกำหนดค่าประเภทการส่งคืนที่แข็งแกร่งแล้วติดเข้ากับคำขอ URL และ BANG มีคำขอ RESTful ของฉันถูกจับคู่กับผลลัพธ์ที่พิมพ์ของฉันที่เก็บไว้ proc มันค่อนข้างตรงไปตรงมาและฉันก็สามารถได้สิ่งที่ฉันต้องการ

ในบทสรุป ฉันไม่ได้มีโอกาสเล่นกับ WCF API ในรายละเอียดมากเกินไป แต่ฉันจะบอกว่ามันเป็นวิธีที่จะไปสู่การพัฒนาลูกค้าเนื่องจากเป็นวิธีที่พิถีพิถันมากกว่า REST หากคุณกำลังจะทำการโทรกลับไปกลับมามากขึ้นหรือน้อยลงและดึง "ดูแบบจำลอง" มันจะให้การตอบสนองแบบดั้งเดิมมากขึ้น

ในทางกลับกัน. หากคุณกำลังทำการสืบค้นที่ซับซ้อน (ish) กับข้อมูลตามการโต้ตอบของไคลเอ็นต์และคุณต้องการ "สร้าง" ตรรกะการสืบค้นและส่งผ่านเป็นพารามิเตอร์ Odata จะทำงานได้

วิธีที่ฉันดูคือถ้าฉันต้องการเปิดเผยข้อมูลของฉันในรูปแบบโครงสร้าง (หมายถึงโครงสร้างตาราง / ความสัมพันธ์) และจากนั้นสอบถามมันโดยตรงจากลูกค้าแล้ว Odata จะทำงานได้ดีที่สุด นอกจากนี้ยังเป็นสิ่งที่ดีสำหรับการอนุญาตให้ "อื่น ๆ " เข้าถึงข้อมูล (ด้วยการรับรองความถูกต้องที่เหมาะสม ฯลฯ ) ซึ่งเป็นสาเหตุที่เป็นไปตามโปรโตคอล OData

หากคุณต้องการคำขอสงบที่กำหนด URL (/ ผลิตภัณฑ์ / คำสั่ง / 22) และสร้าง "ชุดผลลัพธ์" ที่ซับซ้อนจากรหัสที่ได้รับการจัดการ "ซ่อน" และโครงสร้างข้อมูลและคุณอาจได้รับประโยชน์จากข้อความตอบกลับ HTTP ดังนั้น Web API น่าจะเป็นทางออกที่ดีที่สุด ..

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


2

จากมุมมองไฮเปอร์มีเดียอย่างแน่นอน Web API OData ซึ่งใช้ AtomPub เป็นเพียงวิธีการเปิดเผยฐานข้อมูลโดยใช้ HTTP คุณจะได้รับชุดการโอนสถานะที่กำหนดไว้ล่วงหน้า (CRUD) ที่ จำกัด เท่านั้น ในทางตรงกันข้ามบริการสื่อไฮเปอร์มีเดียก็เหมือนกับแอพพลิเคชั่นที่ออกแบบมาสำหรับลูกค้า ด้วย Web API คุณสามารถฝังลิงก์ทั้งหมดที่คุณต้องการรวมทั้งคุณยังสามารถใช้ไวยากรณ์แบบสอบถาม OData ที่จริงแล้วทางออกของสื่อสิ่งพิมพ์ที่ดีที่สุดใน Microsoft stack คือ ASP.NET MVC ถ้าคุณเต็มใจที่จะใช้ HTML เป็นรูปแบบพื้นฐาน


2
มีตัวอย่างออนไลน์ของวิธีการใช้งานนี้โดยใช้ Web API หรือไม่?
Raymond Saltrelli


คุณยังคงสนับสนุนความคิดเห็นนี้ด้วยการเพิ่มการกระทำใน odata v3 ( odata.org/media/30002/OData.html#actions ) หรือไม่
Chris DaMour
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.