WCF Data Services (OData) กับ ASP.NET Web API


87

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

ฉันได้ดูงานนำเสนอทางออนไลน์เกี่ยวกับแต่ละเรื่องและตอนนี้ฉันเอนเอียงไปที่ WCF Data Services เป็นหลักเนื่องจากกลไกการกรองที่สร้างขึ้นใน URI และความสามารถของไฮเปอร์มีเดีย ข้อเสียอย่างเดียวที่ฉันเห็นคือความละเอียดถี่ถ้วนของข้อกำหนด Atom Pub ซึ่งตรงข้ามกับ POX

มีอะไรบ้างที่ฉันควรรู้เกี่ยวกับเทคโนโลยีทั้งสองนี้ก่อนตัดสินใจ? ทำไมบางคนถึงเลือก ASP.NET Web API ผ่าน WCF Data Services?

คำตอบ:


31

นี่เป็นคำถามอัตนัยดังนั้นนี่คือคำตอบแบบอัตนัย IMO, WCF มีค่าใช้จ่ายมากเกินไปสำหรับบริการ RESTful ที่เรียบง่าย ในทางกลับกัน Web API ได้รับการออกแบบมาโดยเฉพาะสำหรับบริการ RESTful

ผมอยู่ในข้อตกลงกับเดฟวอร์ดเกี่ยวกับเรื่องนี้ ตรวจสอบบล็อกของเขาสำหรับข้อมูลเพิ่มเติม

ฉันไม่เห็นด้วยกับแรงกดดันที่จะย้ายจาก ASMX ไปเป็น WCF ในโครงการ WebForms เนื่องจากการยอมรับความซับซ้อนของ WCF เป็นหลักให้รางวัลกับฉันด้วยการจัดลำดับ JSON ที่ยืดหยุ่นน้อยลง ในทางตรงกันข้ามฉันได้เริ่มแปลงโครงการบางส่วนของฉันจาก ASMX เป็น Web API และพอใจกับการที่ Web API มาแทนที่ ASMX ได้อย่างง่ายดาย

ฉันเชื่อว่าในที่สุด Microsoft ก็พบความสมดุลที่ดีระหว่างความเรียบง่ายของ ASMX และพลังของ WCF กับ Web API


2
ขอบคุณสำหรับคำตอบ! ฉันมีคำถามติดตามผลดังนั้นฉันหวังว่าคุณจะคุ้นเคยกับ ASP.NET Web API สิ่งหนึ่งที่ฉันชอบเกี่ยวกับ WCF Data Services คือความสามารถด้านไฮเปอร์มีเดีย เมื่อใช้ตัวอย่าง Netflix คุณสามารถค้นหาประเภทของภาพยนตร์และบริการจะส่งคืนลิงก์ไปยังภาพยนตร์แต่ละเรื่องในประเภทนั้น ๆ แทนที่จะเป็นรายการทั้งหมดสำหรับภาพยนตร์แต่ละเรื่อง มีวิธีดำเนินการกับ ASP.NET Web API หรือไม่ ดูเหมือนว่าจะให้โครงสร้างออบเจ็กต์ที่ขยายทั้งหมดแทนการใช้ไฮเปอร์มีเดีย
Raymond Saltrelli

ฉันยังไม่มีโอกาสได้ใช้ แต่ดูเหมือนว่าคุณสามารถใช้MediaTypeFormatterเพื่อจัดรูปแบบคำตอบของคุณได้ ดูcode.msdn.microsoft.com/Contact-Manager-Web-API-0e8e373dสำหรับตัวอย่าง
jrummell

2
นั่นเป็นความเจ็บปวด ฉันหวังว่าจะมีการกำหนดค่าบางอย่างเพื่อเปิดใช้งาน และถ้าจะเกิดขึ้นโดยอัตโนมัติ เจ้านายของฉันกำลังผลักดันให้ใช้ Web API เนื่องจากอำนาจทั้งหมดที่มีอยู่ใน MS กำลังสำรองไว้ ดูเหมือนจะดีและดี น้ำหนักบรรทุกมีความรัดกุมกว่า OData มีความสามารถในการสืบค้น URI ของ OData ซึ่งขาดหายไปเพียงไฮเปอร์มีเดียนอกกรอบ บางทีมันอาจจะพบทางนั้นเมื่อถึงเวลาปล่อย
Raymond Saltrelli

1
ฉันคิดว่าคำตอบนี้ควรได้รับการทบทวนอีกครั้งเนื่องจาก Microsoft เน้นย้ำให้ใช้ OData Web API ผ่าน Web Api
รหัสตาม

111

ปัจจุบันมีข้อแตกต่างที่สำคัญอื่น ๆ ระหว่าง WebApi และ WCF Data Services ซึ่งไม่มีใครเคยพูดถึง ฉันหวังว่า MS จะออกมาพร้อมกับบทความที่ดีเปรียบเทียบทั้งสอง

ฉันติดตาม OData มาระยะหนึ่งแล้วและ WebApi ด้วย ฉันมักจะพบความแตกต่างที่สำคัญบางประการ

ก่อนอื่นฉันไม่แน่ใจว่าเจ้านายของคุณหมายถึงอะไรโดย "MS กำลังสนับสนุน WebApi" เนื่องจากหมายความว่าพวกเขาไม่ได้สนับสนุน OData ?? IMO พวกเขากำลังสนับสนุนทั้งสองอย่างและปัจจุบันมีการทับซ้อนกันเล็กน้อย Windows Azure Data Market เปิดเผยข้อมูลโดยใช้ OData, Azure Table Storage ใช้ OData, SharePoint 2010 อนุญาตให้ OData Queries ผ่าน Data และผลิตภัณฑ์อื่น ๆ จาก MS ก็รองรับเช่น Excel PowerPivot เป็นกรอบการสืบค้นข้อมูลที่มีประสิทธิภาพมากเมื่อพูดถึงข้อมูลเชิงสัมพันธ์ และเนื่องจากเป็นภาษา RESTful ภาษาเฟรมเวิร์กอุปกรณ์และอื่น ๆ สามารถรวมเข้ากับมันได้

นี่คือสิ่งที่ฉันชอบเกี่ยวกับ OData + WCF Data Services:

OData + WCF Data Services ได้อนุญาตให้แอปพลิเคชันไคลเอนต์สามารถ "แสดงออก" ได้มากขึ้นเมื่อทำการสืบค้นข้อมูลผ่านเว็บ ก่อนหน้านี้เราต้องใช้ ASMX หรือ WCF เสมอเพื่อสร้าง Web API ที่เข้มงวดซึ่งรับไม่ได้และต้องการการเปลี่ยนแปลงตลอดเวลาเมื่อใดก็ตามที่ UI ต้องการบางสิ่งที่แตกต่างออกไปเล็กน้อย แอปพลิเคชันไคลเอนต์สามารถระบุพารามิเตอร์เพื่อกำหนดเงื่อนไขที่จะส่งคืนเท่านั้น หรือทำเหมือนที่ฉันทำและ "Serialize" LINQ Expressions และส่งผ่านสิ่งเหล่านั้นเป็นพารามิเตอร์และไฮเดรตอีกครั้งExpressions<Func<T,bool>>ในเซิร์ฟเวอร์ ดี ทำงานเสร็จแล้ว แต่ฉันต้องการใช้ LINQ บนไคลเอนต์และแปลผ่านเว็บโดยใช้ REST ซึ่งเป็นสิ่งที่ OData อนุญาตและฉันไม่ต้องการใช้ "แฮ็ก" ของโซลูชันของตัวเอง

มันเหมือนกับการเปิดเผย "TRANSACT SQL" โดยไม่ต้องใช้ DB Connection String เพียงแค่ระบุ URL และ whoala! เริ่มการสืบค้น แน่นอนว่าทั้ง WebApi และ WCF Data Services รองรับการพิสูจน์ตัวตน / การอนุญาตดังนั้นคุณจึงสามารถควบคุมการเข้าถึงผนวกคำสั่ง "Where" เพิ่มเติมตามบทบาทหรือการกำหนดค่าข้อมูลอื่น ๆ ฉันอยากทำใน Web Api Layer มากกว่าใน SQL (เช่นการสร้าง Views หรือ Stored Procs) และตอนนี้แอปพลิเคชันสามารถสร้างแบบสอบถามได้เองคุณจะเห็นเครื่องมือ Ad-Hoc และ BI Reporting เริ่มใช้ประโยชน์จาก OData และอนุญาตให้ผู้ใช้กำหนดผลลัพธ์ของตนเองได้ ไม่อาศัยรายงานแบบคงที่ซึ่งมีการควบคุมเพียงเล็กน้อย

เมื่อพัฒนาใน Silverlight, Windows 8 Metro หรือ ASP.NET (MVC, WebForms และอื่น ๆ ) คุณสามารถเพิ่ม "การอ้างอิงบริการ" ใน Visual Studio ไปยัง WCF Data Service และเริ่มใช้ LINQ เพื่อสืบค้นข้อมูลได้อย่างรวดเร็วและคุณจะได้รับ "บริบทข้อมูล" บนไคลเอนต์ซึ่งหมายความว่าจะติดตามการเปลี่ยนแปลงและช่วยให้คุณสามารถ "ส่ง" การเปลี่ยนแปลงของคุณกลับไปที่เซิร์ฟเวอร์ได้ สิ่งนี้คล้ายกับบริการ RIA สำหรับ Silverlight ฉันจะใช้บริการข้อมูล WCF แทนบริการ RIA แต่ในขณะนั้นยังไม่รองรับ DataAnnotations หรือ Actions แต่ตอนนี้ใช้แล้ว :) WCF Data Services มีข้อดีอีกอย่างหนึ่งเหนือบริการ RIA ซึ่งก็คือความสามารถในการดำเนินการ "ประมาณการ" จากลูกค้า สิ่งนี้สามารถช่วยในเรื่องประสิทธิภาพได้ในกรณีที่ฉันไม่ต้องการส่งคืนคุณสมบัติทั้งหมดจากเอนทิตี การมี "บริบทข้อมูล"

ดังนั้นบริการข้อมูล WCF จึงดีมากหากคุณมีข้อมูลที่มีความสัมพันธ์โดยเฉพาะอย่างยิ่งถ้าคุณใช้ SQL Server และ Entity Framework คุณจะสามารถเปิดเผยข้อมูล + การดำเนินการที่สืบค้นได้อย่างรวดเร็ว (การเรียกเพื่อเรียกใช้การดำเนินการเช่นเวิร์กโฟลว์กระบวนการพื้นหลัง) ผ่าน REST ที่มีโค้ดน้อยมาก WCF Data Services เพิ่งอัปเดต เปิดตัวรุ่นใหม่ ตรวจสอบฟังก์ชันการทำงานใหม่ทั้งหมด

ข้อเสียของ WCF Data Services คือ "การควบคุม" ที่คุณปล่อยผ่าน HTTP Stack ฉันพบข้อบกพร่องที่ใหญ่ที่สุดคือในIQueryable<T>วิธีการที่ส่งคืนคอลเล็กชัน ซึ่งแตกต่างจากบริการ RIA และ WebApi คุณไม่มีสิทธิ์เข้าถึงอย่างเต็มที่เพื่อพัฒนาตรรกะในวิธีการ IQueryable ใน RIA บริการและ WebAPI IQueryable<T>คุณสามารถเขียนสิ่งที่คุณต้องการรหัสตราบเท่าที่คุณกลับมา ใน WCF Data Services คุณจะเข้าถึงเพื่อต่อท้ายคำชี้แจง "Where" โดยใช้Expression<Func<T,bool>>วิธีการดักฟัง เจอแบบนี้น่าผิดหวัง แอปพลิเคชันปัจจุบันของเราใช้บริการ RIA และฉันพบว่าเราต้องการความสามารถในการควบคุมตรรกะที่ชาญฉลาด ฉันหวังว่าฉันจะคิดผิดในเรื่องนี้และฉันพลาดอะไรไป

นอกจากนี้บริการข้อมูล WCF ยังไม่รองรับ LINQ Operators ทั้งหมดอย่างเต็มที่ แต่ยังรองรับมากกว่า WebApi

แล้ว WebApi ล่ะ ???

  1. ฉันชอบการควบคุม Http Request / Response
  2. ทำตามได้ง่าย (ใช้ประโยชน์จากรูปแบบ MVC) ฉันมั่นใจว่าจะมีเครื่องมือเพิ่มขึ้น

ณ ตอนนี้ (ตามความเข้าใจของฉัน) ไม่มีการสนับสนุน "บริบทข้อมูล" บนไคลเอนต์ (เช่น Silverlight, ASP.NET Server-Side Code เป็นต้น) เนื่องจาก WebApi ไม่ได้เกี่ยวกับโมเดลข้อมูลเอนทิตีเช่น WCF Data Services / OData คือ. สามารถแสดงคอลเล็กชันของ Model Objects โดยใช้ IQueryable / IEnumerable แต่ไม่มี "คุณสมบัติการนำทาง" ของคีย์หลัก / คีย์ต่างประเทศ (เช่นลูกค้าใบแจ้งหนี้) ให้ใช้เมื่อเอนทิตีโหลดบนไคลเอนต์เนื่องจากไม่มี "บริบทข้อมูล" ซึ่งโหลดแบบอะซิงโครนัส (หรือในการโทรครั้งเดียวโดยใช้ $ expand) และจัดการการเปลี่ยนแปลง คุณไม่มี "การแสดง" แบบจำลองข้อมูลเอนทิตีของคุณที่สร้างรหัสบนไคลเอนต์เช่นเดียวกับที่คุณทำในบริการ RIA หรือบริการข้อมูล WCF ฉันไม่ได้บอกว่าคุณไม่มี / ไม่มีโมเดลในไคลเอนต์ที่แสดงถึงข้อมูลของคุณ แต่คุณได้เติมข้อมูลด้วยตนเองและจัดการว่าจะกำหนด "ใบแจ้งหนี้" ใดให้กับ "ลูกค้า" แต่ละรายเมื่อพวกเขาถูกเรียกค้นผ่านเว็บ สิ่งนี้อาจเป็นเรื่องยุ่งยากโดยเฉพาะกับสิ่งต่างๆของ Async ที่เกิดขึ้น คุณไม่รู้ว่าสายใดจะกลับมาก่อน อาจอธิบายได้ยากที่นี่ แต่อ่านเกี่ยวกับเนื้อหา "บริบทข้อมูล" ในบริการ RIA หรือบริการข้อมูล WCF ดังนั้นเมื่อต้องจัดการกับแอพ Line of Business นี่เป็นปัญหาหลักสำหรับฉัน ขึ้นอยู่กับผลผลิตและการบำรุงรักษาเป็นหลัก คุณสามารถสร้างแอปแบบสุ่มโดยไม่ต้องใช้บริบทข้อมูล มันทำให้สิ่งต่างๆง่ายขึ้นโดยเฉพาะใน Silverlight, WPF และตอนนี้ Windows 8 Metro การมีเอนทิตีเชิงสัมพันธ์โหลดลงในหน่วยความจำแบบอะซิงโครนัสและการมี Two-Binding เป็นสิ่งที่ดีจริงๆ

ต้องบอกว่านี่หมายความว่าบางวัน WebApi สามารถรองรับ "บริบทข้อมูล" บนไคลเอนต์ได้หรือไม่? ฉันคิดว่ามันทำได้ นอกจากนี้ด้วยการใช้เครื่องมือที่มากขึ้นโครงการ Visual Studio สามารถสร้างวิธีการ CRUD ทั้งหมดของคุณตามสคีมาฐานข้อมูล (หรือกรอบเอนทิตี)

นอกจากนี้ฉันรู้ว่าฉันพูดถึง. NET ถึง. NET Frameworks เท่านั้นเมื่อต้องทำงานกับ WCF Data Services หรือ WebApi แต่ฉันทราบดีว่า HTML / JS เป็นผู้เล่นหลักเช่นกัน ฉันแค่พูดถึงประโยชน์ที่ฉันพบเมื่อจัดการกับ Silverlight UI หรือ ASP.NET Server-Side Code เป็นต้นฉันเชื่อด้วยการกำเนิดของ "IndexedDB" ใน HTML5 / JavaScript ที่มี "บริบทข้อมูล" และ กรอบงาน LINQ ใน JavaScript สามารถใช้งานได้ทำให้ความสามารถในการสืบค้น OData Services ง่ายยิ่งขึ้นจาก JavaScript (คุณสามารถใช้ DataJS วันนี้กับ OData) นอกจากนี้การใช้ KnockoutJS เพื่อรองรับ MVVM และ Binding ใน HTML / JS ด้วยจะทำให้เป็นเรื่องง่าย :)

ฉันกำลังหาข้อมูลว่าจะใช้แพลตฟอร์มใด ฉันมีความสุขที่ได้ใช้อย่างใดอย่างหนึ่ง แต่ฉันมักจะพึ่งพา OData จากข้อเท็จจริงที่ว่าแอปพลิเคชันถัดไปของฉันเป็นพื้นฐานเกี่ยวกับ Analytics (อ่านอย่างเดียว) และฉันต้องการ RESTful Api ที่มีความสมบูรณ์ ฉันเชื่อว่า OData + WCF Data Services ให้ฉันได้เพราะ WebApi รองรับเฉพาะ $ take, $ skip, $ filter, $ orderby ผ่าน Collections ไม่รองรับ Projections, Includes ($ expand) และอื่น ๆ ฉันไม่มี "Updates / Deletes / Inserts" มากนักและข้อมูลของเราค่อนข้างมีความสัมพันธ์กัน

ฉันหวังว่าคนอื่น ๆ จะเข้าร่วมในการอภิปรายและแสดงความคิดเห็น ฉันยังคงตัดสินใจและชอบที่จะรับฟังความคิดเห็นอื่น ๆ ฉันคิดว่าทั้งสองอย่างเป็นกรอบที่ยอดเยี่ยม ฉันสงสัยว่าคุณต้องเลือกทำไมไม่ใช้ทั้งสองอย่างถ้าจำเป็น จากไคลเอนต์ทุกอย่างเกี่ยวกับการสร้างการเรียก REST อย่างไรก็ตาม แค่คิด :)


4
Web Api มีตัวอย่างใหม่สำหรับการรองรับ OData ที่เพิ่มความสงบที่หายไปและวางไว้บนพื้นฐานเดียวกับที่ WCF DS ใช้: [link] [ blogs.msdn.com/b/alexj/archive/2012/08/15/…
Johannes รูดอล์ฟ

@JohannesRudolph - ลิงก์ที่คุณให้ฟังดูน่าสนใจ แต่เสีย
Olly

ตกลงคิดว่ามันเป็นแค่ปัญหาในการจัดรูปแบบ ควรเป็น: blogs.msdn.com/b/alexj/archive/2012/08/15/… .
Olly

Web Api ต้องการความรักเล็กน้อยในการทำงานกับ Excel เวอร์ชันก่อนปี 2013: aspnetwebstack.codeplex.com/workitem/820
David d C e Freitas

5
ขณะที่เราอยู่ในปี 2014 ตอนนี้ Microsoft มีบล็อกโพสต์ที่น่าสนใจblogs.msdn.com/b/odatateam/archive/2014/03/27/…เพื่อหารือเกี่ยวกับอนาคตของการสนับสนุน OData จาก WCF และ WebApi
hardywang

26

เราเชื่อว่า Web API เป็นแพลตฟอร์มที่เหมาะสมสำหรับบริการ OData ในอนาคตและด้วยเหตุนี้จะลงทุนในแพลตฟอร์มนั้นเป็นหลัก สำหรับสแต็กเซิร์ฟเวอร์ OData แน่นอนว่าเราจะยังคงใส่ทรัพยากรที่สำคัญลงในไลบรารีหลักของ OData และไคลเอนต์ แต่เราวางแผนที่จะ ลดการลงทุนใน WCF Data Servicesเป็นกองสำหรับการสร้างบริการ OData

บล็อกทีม OData

ดูเหมือนว่าทุกอย่างจะชัดเจนเพียงพอแล้ว


16

ทั้ง Web API และ WCF Data Services รองรับ OData นอกกรอบ ด้วย WCF Data Services (WCFDS) เป็นไปโดยอัตโนมัติ ด้วย Web API ผลตอบแทนจากตัวควบคุมและแท็กของคุณวิธีการที่มีIQueryable [Queryable]สิ่งนี้จะทำให้คุณได้รับ$filterฟังก์ชันที่คุณกำลังพูดถึง และถ้าคุณทำเช่นนี้ทั้งคู่สามารถจัดการ JSON ในการตอบกลับโดยอัตโนมัติโดยใส่accept=application/jsonส่วนหัวของคำขอ OData จาก WCFDS รองรับคำหลัก OData มากกว่า Web API (แม้ว่าจะมีเพียง$expandคำหลักเท่านั้นที่อยู่ในใจ) แต่ฉันแน่ใจว่าเวลาจะแก้ไขได้

ทั้งไคลเอนต์. NET และเพจ HTML สามารถเรียกใช้ทั้งสองทางเลือกเหล่านี้ได้อย่างง่ายดาย แต่ถ้าคุณชอบ LINQ และคุณกำลังสร้างไคลเอนต์. NET คุณสามารถเพิ่ม WCFDS ลงในโปรเจ็กต์ของคุณเป็นข้อมูลอ้างอิงบริการได้ วิธีนี้ช่วยให้คุณสามารถข้ามธุรกิจ HTTP ทั้งหมดและสอบถามคอลเลกชันได้โดยตรง

บรรทัดล่างคือไม่มีอะไรป้องกันไม่ให้คุณใส่ไฟล์. svc ลงในโครงการ ASP.Net MVC ของคุณ ไม่ใช่เรื่องอย่างใดอย่างหนึ่งหรือเป็นเรื่อง การเพิ่มบริการข้อมูลไปยังเซิร์ฟเวอร์ของคุณจะช่วยให้คุณไม่ต้องเขียนคอนโทรลเลอร์จำนวนมาก แต่ไม่ได้ป้องกันไม่ให้คุณเขียนคอนโทรลเลอร์เพิ่มเติมหากต้องการ


6

กล่าวอีกนัยหนึ่ง:

หากคุณต้องการเปิดเผยแบบจำลองข้อมูล (EDM หรืออย่างอื่น) อย่างรวดเร็วและไม่จำเป็นต้องใช้รหัสหรือตรรกะทางธุรกิจมากนักบริการข้อมูลWCFทำให้สิ่งนี้ง่ายมากและเป็นจุดเริ่มต้นที่ดี

หากคุณกำลังสร้าง API และเพียงแค่ต้องการเปิดเผยทรัพยากรบางอย่าง (และตรรกะ) โดยใช้ไวยากรณ์แบบสอบถาม OData หรือการจัดรูปแบบASP.NET Web APIน่าจะเป็นจุดเริ่มต้นที่ดีที่สุด

http://mattmilner.com/Milner/Blog/post/2013/04/02/WCF-Data-Services-and-Web-API-with-OData;-choices-choices.aspx


5

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

ฉันยังมีระบบขนาดใหญ่ที่ต้องสร้างและมันทำให้ฉันเครียดว่าเส้นทางไม่ชัดเจนกว่านี้ ฉันวางแผนที่จะหยุดพักอีกสองสามเดือนในขณะที่ทุกอย่างเสร็จสิ้น และส่วนตัวฉันกำลังรูท datajs (ลองดู JayData ด้วย)


1

เพียงแค่ใส่มันในแง่ที่ง่ายที่สุดถอยห่างจากโปรโตคอลพื้นฐานและดูสิ่งนี้จากมุมมองของนักพัฒนา / ผู้ใช้ Web API เป็น Rest Framework ที่ใช้ HTTP ชั้นหนึ่งของ Microsoft ไม่ใช่ WCF นั่นหมายถึงฟีเจอร์ Rest ที่ขาดหายไปข้อมูลจำเพาะจะถูกเพิ่มไปยังท่อ Web API และไม่จำเป็นต้องอยู่ใน WCF

ใช่คุณสามารถใช้สิ่งเหล่านี้ด้วยตัวคุณเองใน WCF แต่ตามที่กล่าวไว้ในประโยคที่คุณต้องใช้สิ่งเหล่านี้ด้วยตัวเอง

เช่นเดียวกับตัวอย่างในวันนี้การใช้การพิสูจน์ตัวตนแบบ 2 ปัจจัยสำหรับ Web API จะใช้เวลาน้อยกว่า 15 นาทีโดยใช้ OWIN ซึ่งเป็นแพ็กเกจการรับรองความถูกต้อง / การให้สิทธิ์โดยหลักที่เริ่มต้นเป็นโครงการโอเพ่นซอร์ส

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

ดังนั้นคำแนะนำง่ายๆของฉันสำหรับคุณหากคุณต้องการสร้างแอปพลิเคชันที่ใช้ Restfull HTTP ให้ใช้ Web API (หรือ ASP.NET Core สำหรับการพกพา) และอยู่ห่างจาก WCF จริงๆ หากโปรโตคอลไม่ใช่ HTTP และไม่สามารถเป็น HTTP ได้ให้ใช้ WCF


0

นี่คือคำตอบ TL; DR สำหรับคำถามนี้

WCF เป็นมีดของกองทัพสวิสสำหรับไขควงของ WEB API สำหรับการสื่อสารและถ่ายโอนข้อมูล: WCF สามารถทำทุกอย่างที่ WEB API ทำได้ แต่ถ้าคุณต้องการมากกว่านั้น (เช่นการใช้โปรโตคอล TCP) WCF คือหนทางที่จะไป

นี่คือการเปรียบเทียบที่ดี

WEB API

เหตุผลอันดับหนึ่งในการใช้ WEB API คือมีน้ำหนักเบา ซึ่งหมายความว่าง่ายต่อการใช้งานง่ายต่อการเรียนรู้ง่ายต่อการบำรุงรักษา ฯลฯ ได้รับการออกแบบมาโดยเฉพาะสำหรับเว็บซึ่งต้องการบริการเว็บ RESTful ผ่าน HTTP มันทำเช่นนี้และทำได้ดี หากนี่คือทั้งหมดที่คุณต้องการ WEB API น่าจะเป็นหนทางไป

นอกจากนี้ยังเป็นโอเพ่นซอร์ส (ถ้าคุณสนใจ)

ห้องสุขา

WCF ทำได้มากกว่า WEB API มากมาย: รองรับโปรโตคอลการถ่ายโอนหลายรูปแบบการแลกเปลี่ยนหลายรูปแบบ (WEB API ต้องการการรวมกับ SignalR หรือ Web Sockets) บริการ SOAP สามารถอธิบายได้ใน WSDL มีคุณสมบัติด้านความปลอดภัยเพิ่มเติมและอื่น ๆ ไปกับ WCF หากคุณต้องการฟังก์ชันเพิ่มเติมนี้

OData

OData เป็นเพียง

โปรโตคอลแบบเปิดเพื่อให้สามารถสร้างและใช้ RESTful APIs ที่สอบถามได้และทำงานร่วมกันได้ด้วยวิธีที่ง่ายและเป็นมาตรฐาน ที่มา: http://www.odata.org/

กล่าวอีกนัยหนึ่งคือระดับสูงเป็นเพียงการกำหนดไวยากรณ์เฉพาะสำหรับคำขอ RESTful HTTP ซึ่งจะให้ประโยชน์เช่นเดียวกับโปรโตคอลใด ๆ และอย่างน้อย 2013 ทั้ง WCF และ WEB API อนุญาตให้ใช้ OData ดังนั้นจึงไม่ควรกังวลเกี่ยวกับ OData

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