ASP.NET WebApi เทียบกับ MVC? [ปิด]


140

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

คำถาม:อะไรคือข้อดีและ / หรือข้อเสียของการใช้ asp.net WebApi เกี่ยวกับ MVC?



11
เป็นเรื่องตลกสำหรับฉันที่จะสุ่มปิดคำถาม "vs" เหล่านี้ทันทีหรือไต่ระดับขึ้นไปถึงระดับนี้
cbmeeks

10
ฮึ่ม ฉันเกลียดป้ายแบนเนอร์ "ปิดตัวเกินไป" หลายครั้งที่ฉันพบคำถามที่ยอดเยี่ยมเช่นนี้ และบ่อยครั้งที่พวกเขาไม่ได้คำตอบที่ดี ดังนั้นถ้ามันกว้างเกินไป ผู้เชี่ยวชาญอยู่ที่นี่และไม่ได้อยู่ในวิกิพีเดียหรือฟอรัมอื่น ๆ ดังนั้นให้พวกเขาทำสิ่งที่พวกเขาทำและออกไปให้พ้นทาง
nharrer

คำตอบ:


47

WebApi อนุญาตให้สร้างบริการที่สามารถแสดงผลผ่าน HTTP แทนที่จะใช้บริการที่เป็นทางการเช่น WCF หรือ SOAP ความแตกต่างอีกอย่างก็คือวิธีที่ WebApi ใช้โปรโตคอล Http และทำให้เป็นพลเมือง Http ชั้นหนึ่งอย่างแท้จริง

ปรับปรุง: ASP.NET Core, Web API ได้รับการรวมเข้ากับประเภทโครงการ MVC ApiControllerเรียนรวมเข้าไปในControllerชั้นเรียน เพิ่มเติมได้ที่: https://wildermuth.com 2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6

ลิงก์ที่เกี่ยวข้องของการเปรียบเทียบการสนทนาและแบบฝึกหัด:

ป้อนคำอธิบายรูปภาพที่นี่


20
ไม่เห็นด้วยว่าโพสต์อื่นนั้นคล้ายกัน โพสต์อื่น ๆ เป็นจริงเกี่ยวกับ WCF vs WebAPI
Shane Courtrille

เทคนิคการพูดมันบอกว่า WCF Web API อย่างไรก็ตามโพสต์กล่าวถึงในบรรทัดที่สองว่ามันถูกรวมเข้ากับ Asp.net web api ตอนนี้และสนับสนุนการโฮสต์ด้วยตนเอง ฉันได้อัปเดตลิงก์แล้วพร้อมลิงก์ล่าสุด หวังว่าจะช่วยได้
Yusubov

อัปเดตข้อมูลอ้างอิง
Yusubov

23

WebAPI แยก OData ออกดังนั้นคุณจะได้รับประโยชน์ทั้งหมดของการใช้ OData ตัวอย่างเช่นด้วย WebAPI คุณจะได้รับ:

  • ตัวเลือกการค้นหาเช่น $ filter, $ top, $ orderby ฯลฯ
    • ด้วยตัวควบคุม MVC แบบดั้งเดิมคุณต้องใช้สิ่งเหล่านี้ด้วยตัวเอง
  • รูปแบบมาตรฐาน
    • มีลูกค้า OData ที่จะเข้าใจรูปแบบพื้นฐานของ RESTful API ของคุณ

5
เรียงจาก ฉันสามารถรองรับ oData ได้ แต่ถ้าคุณตกแต่งแอ็คชั่นด้วยแอตทริบิวต์ 'ที่น่าสงสัย' อย่างน้อยก็ใน RC
EBarr

14

Asp.Net Web API VS Asp.Net MVC 1 Asp.Net MVC ใช้ในการสร้างเว็บแอปพลิเคชั่นที่ส่งคืนทั้งมุมมองและข้อมูล แต่ Asp.Net Web API ใช้เพื่อสร้างบริการ HTTP แบบเต็มด้วยวิธีที่ง่ายและเรียบง่ายที่คืนค่าข้อมูลที่ไม่ได้ดูเท่านั้นป้อนคำอธิบายรูปภาพที่นี่

2 . Web API ช่วยในการสร้างบริการ REST-ful ผ่าน. NET Framework และสนับสนุนการเจรจาต่อรองเนื้อหา (เกี่ยวกับการตัดสินใจข้อมูลรูปแบบการตอบสนองที่ดีที่สุดที่ลูกค้าสามารถยอมรับได้ซึ่งอาจเป็น JSON, XML, ATOM หรือข้อมูลที่จัดรูปแบบอื่น ๆ ) โฮสติ้งด้วยตนเองซึ่งไม่ได้อยู่ใน MVC

3 . Web API ยังดูแลการส่งคืนข้อมูลในรูปแบบเฉพาะเช่น JSON, XML หรืออื่น ๆ ตามส่วนหัว Accept ในคำขอและคุณไม่ต้องกังวลเกี่ยวกับเรื่องนั้น MVC ส่งคืนข้อมูลในรูปแบบ JSON โดยใช้ JsonResult เท่านั้น

4 . ใน Web API คำขอจะถูกแมปกับการดำเนินการตามกริยา HTTP แต่ใน MVC จะถูกแมปกับชื่อการกระทำ

5 . Asp.Net Web API เป็นเฟรมเวิร์กใหม่และเป็นส่วนหนึ่งของเฟรมเวิร์ก ASP.NET หลัก โมเดลการโยงตัวกรองการกำหนดเส้นทางและคุณลักษณะ MVC อื่น ๆ ที่มีอยู่ใน Web API นั้นแตกต่างจาก MVC และมีอยู่ในแอสเซมบลี System.Web.Http ใหม่ ใน MVC, featues เหล่านี้มีอยู่ใน System.Web.Mvc ดังนั้นเว็บ API สามารถใช้กับ Asp.Net และเป็นเลเยอร์บริการแบบสแตนด์อะโลนได้

6 . คุณสามารถผสม Web API และตัวควบคุม MVC ในโครงการเดียวเพื่อจัดการคำขอ AJAX ขั้นสูงซึ่งอาจส่งคืนข้อมูลในรูปแบบ JSON, XML หรือรูปแบบอื่น ๆ และสร้างบริการ HTTP แบบเต็ม โดยทั่วไปสิ่งนี้จะเรียกว่า Web API self hosting

7 . เมื่อคุณมีคอนโทรลเลอร์ MVC และ Web API ผสมและคุณต้องการใช้การให้สิทธิ์คุณต้องสร้างตัวกรองสองตัวสำหรับ MVC และอีกตัวสำหรับ Web API เนื่องจากทั้งสองแตกต่างกัน

8 . นอกจากนี้ Web API เป็นสถาปัตยกรรมที่มีน้ำหนักเบาและยกเว้นแอปพลิเคชันเว็บที่สามารถใช้กับแอพสมาร์ทโฟนได้

แหล่งต้นฉบับอยู่ที่นี่


13

ความคล้ายคลึงกัน

1) ทั้งสองสืบทอดจาก ihhtphandler สำหรับ asyncrequest ดังนั้นโดยทั่วไป apicontroller หรือตัวควบคุม mvc ทั้งคู่เป็นตัวล้อมรอบเว็บ.

ความแตกต่าง: 1) ตัวควบคุม mvc นั้นหนักมากถ้าคุณสามารถอ่านคำจำกัดความของมันได้คุณจะเห็นว่ามีอินเตอร์เฟสและรหัสฐานที่ใช้อยู่เท่าไหร่ web api นั้นเป็นตัวควบคุมที่เบากว่าและแยกแยะคำขอตามพารามิเตอร์ที่ส่งผ่าน )

2) ตัวควบคุม MVC มีคุณสมบัติมากมายเช่นกลับมาดูผลการกระทำผลจาวาสคริปต์ ฯลฯ แต่ในเว็บ api มี JSON หรือ XML

3) API สำหรับการใช้บริการ Restful (รับ, โพสต์, ใส่, ลบ, ตัวเลือก) ซึ่งสามารถโฮสต์ได้อย่างอิสระที่ใดก็ได้โดยไม่ต้องขึ้นอยู่กับมุมมองตัวควบคุม MVC ไม่สามารถรองรับได้เนื่องจากมันรวมเข้ากับมุมมองอย่างแน่นหนา


1
มันน่าสังเกตว่าคุณยังสามารถบรรลุ API เช่นพฤติกรรมกับ MVC โดยใช้ผลการดำเนินการ mvc เช่น JSONResult และอื่น ๆ อย่างไรก็ตามในขณะที่คุณชี้ให้เห็นว่าคอนโทรลเลอร์ MVC นั้นหนักกว่า นอกจากนี้วิธีการที่ตัวควบคุม Web API ถูกนำไปใช้ยังเอื้อต่อการสร้าง API มากกว่า MVC
Grizzly Peak Software

12

ภาพนี้ดูเหมือนจะแสดงความแตกต่างและความคล้ายคลึงในแบบที่เป็นอยู่ ฉันหวังว่าการช่วยเหลือจะน่าสนใจสำหรับฉัน

ป้อนคำอธิบายรูปภาพที่นี่


10

ในบางจุดคุณอาจต้องการลืม ASP.NET MVC ทั้งหมดเข้าด้วยกัน หากคุณเป็นนักพัฒนา. NET แต่คุณต้องการสร้างแอปพลิเคชันหน้าเดียว (โดยใช้ Angular เป็นต้น) คุณจะต้องการสิทธิประโยชน์ของบริการ RESTful (WebAPI) โดยไม่ต้องมี bloat ที่ไม่จำเป็นซึ่งมาพร้อมกับ ASP.NET MVC ทั้งหมด


5

ASP.NET MVC และ ASP.NET Web api ทั้งคู่ใช้เพื่อจุดประสงค์ที่แตกต่างกัน

ASP.NET

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

แต่ละเฟรมเวิร์กมีสไตล์การพัฒนาที่แตกต่างกัน สิ่งที่คุณเลือกขึ้นอยู่กับการรวมกันของเนื้อหาการเขียนโปรแกรม (ความรู้ทักษะและประสบการณ์การพัฒนา) ประเภทของแอปพลิเคชันที่คุณสร้างและวิธีการพัฒนาที่คุณคุ้นเคย ทั้งสามเฟรมเวิร์กจะได้รับการสนับสนุนอัพเดตและปรับปรุงใน ASP.NET รุ่นอนาคต

MVC

ASP.NET MVC มอบวิธีการสร้างเว็บไซต์แบบไดนามิกที่มีประสิทธิภาพซึ่งช่วยให้คุณแยกข้อกังวลออกได้อย่างชัดเจนและให้คุณควบคุมมาร์กอัปเพื่อการพัฒนาที่สนุกสนานและคล่องตัว ASP.NET MVC มีคุณสมบัติมากมายที่ช่วยให้การพัฒนา TDD เป็นไปอย่างรวดเร็วและเป็นมิตรสำหรับการสร้างแอพพลิเคชั่นที่ซับซ้อนที่ใช้มาตรฐานเว็บล่าสุด

เว็บ API

ASP.NET Web API เป็นเฟรมเวิร์กที่ทำให้ง่ายต่อการสร้างบริการ HTTP ที่เข้าถึงลูกค้าได้หลากหลายรวมถึงเบราว์เซอร์และอุปกรณ์พกพา ASP.NET Web API เป็นแพลตฟอร์มในอุดมคติสำหรับการสร้างแอปพลิเคชั่น RESTful ใน. NET Framework

คุณสามารถอ่านแบบฟอร์มเพิ่มเติมได้ที่นี่ http://www.dotnet-tricks.com/Tutorial/webapi/Y95G050413-Difference-between-ASP.NET-MVC-and-ASP.NET-Web-API.html


3

ASP.NET MVC มุ่งเน้นที่การสร้างผลลัพธ์ของ HTML อย่างง่าย ASP.NET Web API มุ่งเน้นที่การสร้างผลลัพธ์ของข้อมูลดิบให้ง่ายขึ้น

ในโลก WebForms ASP.NET MVC จะเทียบเท่ากับเพจ. aspx และ ASP.NET Web API จะเป็น. asx


2

Asp.Net MVC ใช้ในการสร้างเว็บแอปพลิเคชั่นที่ส่งคืนทั้งมุมมองและข้อมูล แต่ Asp.Net Web API ใช้เพื่อสร้างบริการ HTTP แบบเต็มด้วยวิธีที่ง่ายและเรียบง่าย

Web API ช่วยในการสร้างบริการ REST-ful ผ่าน. NET Framework และยังสนับสนุนการเจรจาต่อรองเนื้อหา (เกี่ยวกับการตัดสินใจข้อมูลรูปแบบการตอบสนองที่ดีที่สุดที่ลูกค้าสามารถยอมรับได้อาจเป็น JSON, XML, การโฮสต์ด้วยตนเองซึ่งไม่ใช่ ใน MVC

Web API ยังดูแลการส่งคืนข้อมูลในรูปแบบเฉพาะเช่น JSON, XML หรืออื่น ๆ ตามส่วนหัว Accept ในคำขอและคุณไม่ต้องกังวลเกี่ยวกับเรื่องนั้น MVC ส่งคืนข้อมูลในรูปแบบ JSON โดยใช้ JsonResult เท่านั้น


1

โดยปกติแล้ว WebAPI จะใช้สำหรับบริการข้อมูลที่ MVC สามารถสร้างเอาต์พุตได้หลายประเภท

WebAPI ช่วยลดความยุ่งยากในการสร้างบริการข้อมูล มันสะอาดและง่ายสำหรับจุดประสงค์นี้ MVC มาพร้อมกับเครื่องมืออีกมากมาย

MVC สามารถสร้างเอาต์พุตใดก็ได้ WebAPI สามารถส่งออกได้ การสร้างเอาต์พุตจากเทมเพลตสามารถทำได้อย่างง่ายดายใน MVC ฉันหาเหตุผลไม่ได้ใน WebAPI นักพัฒนา PHP และโปรแกรมเมอร์ ASP เก่าอาจรู้จักทัศนคตินี้ในอดีตซึ่งคุณสามารถสร้างไฟล์ HTML ที่เกี่ยวข้องกับโค้ด C # ได้

WebAPI- DATA MVC - DATA, UI / HTML, XHTML, ไฟล์, เทมเพลต ฯลฯ

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