คำถามติดแท็ก web-api

API เฉพาะที่สื่อสารผ่านเว็บโปรโตคอลเช่น ASP.net Web API ตลอดจน API ที่เปิดเผยหน้าเว็บสำหรับการสื่อสารบนเครือข่ายหรือแอปสำหรับการสื่อสารของอุปกรณ์

15
เราควรออกแบบรหัสของเราตั้งแต่ต้นเพื่อเปิดใช้การทดสอบหน่วยหรือไม่
มีการถกเถียงกันในทีมของเราในขณะนี้ว่าการปรับเปลี่ยนการออกแบบรหัสเพื่อให้การทดสอบหน่วยเป็นกลิ่นรหัสหรือในระดับที่สามารถทำได้โดยไม่ต้องมีกลิ่นรหัส สิ่งนี้เกิดขึ้นเพราะเราเพิ่งเริ่มวางแนวทางปฏิบัติที่มีอยู่ใน บริษัท พัฒนาซอฟต์แวร์อื่น ๆ โดยเฉพาะเราจะมีบริการ Web API ที่จะบางมาก ความรับผิดชอบหลักของมันคือการจัดการคำขอ / ตอบกลับเว็บและเรียก API พื้นฐานที่มีตรรกะทางธุรกิจ ตัวอย่างหนึ่งคือเราวางแผนที่จะสร้างโรงงานที่จะคืนค่าประเภทวิธีการตรวจสอบสิทธิ์ เราไม่จำเป็นต้องให้อินเทอร์เฟซสืบทอดเนื่องจากเราไม่ได้คาดหวังว่ามันจะเป็นสิ่งอื่นนอกเหนือจากรูปแบบที่เป็นรูปธรรม อย่างไรก็ตามหากต้องการทดสอบบริการ Web API เราจะต้องจำลองโรงงานนี้ นี่หมายถึงว่าเราออกแบบคลาสคอนโทรลเลอร์ API ของเว็บเพื่อยอมรับ DI (ผ่าน Constructor หรือ Setter) ซึ่งหมายความว่าเราออกแบบส่วนของคอนโทรลเลอร์เพียงเพื่อให้ DI และใช้อินเตอร์เฟสที่เราไม่ต้องการหรือเราใช้ เฟรมเวิร์กของบุคคลที่สามอย่าง Ninject เพื่อหลีกเลี่ยงการออกแบบคอนโทรลเลอร์ในลักษณะนี้ แต่เราจะต้องสร้างอินเทอร์เฟซ บางคนในทีมดูเหมือนไม่เต็มใจที่จะออกแบบรหัสเพื่อการทดสอบ ดูเหมือนว่าฉันจะต้องมีการประนีประนอมบางอย่างถ้าคุณหวังว่าจะทดสอบหน่วย แต่ฉันไม่แน่ใจว่าบรรเทาความกังวลของพวกเขาอย่างไร เพื่อให้ชัดเจนนี่คือโครงการใหม่ล่าสุดดังนั้นจึงไม่ได้เกี่ยวกับการแก้ไขโค้ดเพื่อเปิดใช้งานการทดสอบหน่วย มันเกี่ยวกับการออกแบบโค้ดที่เราจะเขียนให้ทดสอบได้

12
ฉันจะจัดการการอภิปรายทางเทคนิคเกี่ยวกับ WCF กับ Web API ได้อย่างไร
ตอนนี้ฉันกำลังจัดการทีมงานของนักพัฒนาประมาณ 15 คนและเราติดอยู่ที่จุดหนึ่งในการเลือกเทคโนโลยีซึ่งทีมถูกแบ่งออกเป็นสองทีมตรงข้ามกันโดยสิ้นเชิงโต้วาทีการใช้ WCF กับเว็บ API ทีม A ที่รองรับการใช้งาน Web API นำมาซึ่งเหตุผลเหล่านี้: Web API เป็นวิธีการบริการการเขียนที่ทันสมัย ​​( Wikipedia ) WCF เป็นโอเวอร์เฮดสำหรับ HTTP มันเป็นทางออกสำหรับ TCP และ Net Pipes และโปรโตคอลอื่น ๆ รุ่น WCF ไม่ใช่ POCO เนื่องจาก [DataContract] & [DataMember] และแอตทริบิวต์เหล่านั้น SOAP ไม่สามารถอ่านได้และมีประโยชน์เท่ากับ JSON SOAP เป็นค่าใช้จ่ายสำหรับเครือข่ายเมื่อเทียบกับ JSON (การส่งผ่าน HTTP) ไม่มีวิธีการมากไป ทีม B ที่รองรับการใช้ WCF …
49 wcf  decisions  web-api 

3
ทำไม PATCH ถึงไม่เป็น idempotent?
ฉันสงสัยเกี่ยวกับเรื่องนี้ สมมติว่าฉันมีuserทรัพยากรด้วยidและnameสาขา ถ้าฉันต้องการอัปเดตฟิลด์ฉันสามารถทำคำขอแพทช์กับทรัพยากรเช่นนี้ได้ PATCH /users/42 {"name": "john doe"} จากนั้นแอปพลิเคชันจะอัปเดตชื่อผู้ใช้ 42 แต่ทำไมถ้าฉันทำซ้ำคำขอนี้ผลลัพธ์จะแตกต่างกันอย่างไร อ้างอิงจากRFC 5789 PATCH นั้นไม่ปลอดภัยหรือ idempotent

2
ประสิทธิภาพเป็นเหตุผลเดียวที่ไม่ใช้ SignalR (websockets) ทั้งหมดแทน REST API แบบดั้งเดิมหรือไม่
ฉันเคยใช้SignalRฟังก์ชั่นส่งข้อความตามเวลาจริงในหลายโครงการของฉัน ดูเหมือนว่าจะทำงานได้อย่างน่าเชื่อถือและง่ายต่อการเรียนรู้ที่จะใช้ อย่างน้อยที่สุดสิ่งล่อใจสำหรับฉันคือการละทิ้งการพัฒนาบริการ Web API และใช้SignalRสำหรับทุกสิ่ง ฉันรู้สึกว่าสิ่งนี้สามารถทำได้โดยการออกแบบอย่างรอบคอบและถ้าเป็นเช่นนั้นก็จะหมายความว่ารหัสลูกค้าน้อยกว่าจะจำเป็น ที่สำคัญกว่านั้นก็หมายความว่าจะมีอินเทอร์เฟซเดียวกับบริการมากกว่าแยกส่วนและในกรณีที่เลวร้ายที่สุดที่หนึ่งสามารถเชื่อมต่อนี้โดยไม่ต้องคิดเกี่ยวกับเมื่อสิ่งที่ได้รับการแสดง ฯลฯ ดังนั้นฉันอยากรู้ว่า: มีเหตุผลอื่นใดอีกหรือไม่ที่จะไม่ใช้ SignalR แทนบริการเว็บทั้งหมดนอกเหนือจากประสิทธิภาพ ประสิทธิภาพของ SignalR นั้นเพียงพอหรือไม่เกี่ยวกับเรื่องนี้ มันเป็นความฝันของฉันมานานแล้วที่จะสามารถแปลวัตถุฝั่งเซิร์ฟเวอร์และคำจำกัดความการบริการเป็นรหัสการเข้าถึงบริการฝั่งไคลเอ็นต์โดยไม่มีอะไรโง่node.jsๆ ตัวอย่างเช่นถ้าฉันกำหนดวัตถุที่น่าสนใจInterestingObjectและบริการไปCRUDยังวัตถุInterestingObjectServiceฉันสามารถกำหนดเส้นทาง URL มาตรฐานไปยังบริการ - พูดว่า "/ {serviceName} / {methodName}" - แต่ฉันยังคงต้องเขียนรหัสลูกค้าเพื่อเข้าถึง บริการ. เนื่องจากวัตถุจะถูกส่งผ่านจากไคลเอนต์ไปยังเซิร์ฟเวอร์และย้อนกลับจึงไม่มีเหตุผลเชิงปฏิบัติที่จะมีเพื่อกำหนดวัตถุอย่างชัดเจนในรหัสฝั่งไคลเอ็นต์และไม่จำเป็นต้องกำหนดเส้นทางเพื่อดำเนินการ CRUD อย่างชัดเจน ฉันรู้สึกว่าควรมีวิธีที่จะทำให้มาตรฐานทั้งหมดนี้เป็นไปได้ในการเขียนไคลเอนต์ภายใต้สมมติฐานที่ว่าการเข้าถึงบริการทำงานจากไคลเอนต์ไปยังเซิร์ฟเวอร์และกลับมาอย่างโปร่งใสเหมือนที่ฉันเขียน WinForms หรือ Java Applet หรือ Native App หรือสิ่งที่มีคุณ หาก SignalR นั้นดีพอที่จะใช้แทนเว็บเซอร์วิสแบบดั้งเดิมมันอาจเป็นวิธีที่ปฏิบัติได้เพื่อให้บรรลุเป้าหมายนี้ SignalR มีฟังก์ชั่นเพื่อทำให้ฮับทำงานเหมือนบริการที่ฉันอธิบายดังนั้นฉันสามารถกำหนดบริการทั่วไป (CRUD) ที่จะให้ฟังก์ชั่นทั้งหมดนี้นอกกรอบพร้อมภาพสะท้อนบางอย่าง จากนั้นฉันเกือบจะสามารถรับสิทธิ์ในการเข้าถึงบริการได้ช่วยให้ฉันรำคาญกับการเขียนรหัสใหม่เพื่อเข้าถึงสิ่งที่สามารถเข้าถึงได้โดยการประชุม - …

3
เราควรเรียก Web API จากแอปพลิเคชัน MVC ในโซลูชันเดียวกันหรือไม่
ฉันกำลังทำงานในโครงการใน MVC ที่มีแอปพลิเคชันมือถือสิ่งหนึ่งที่ชัดเจนว่าเราต้องใช้ Web API เพื่อให้สามารถใช้ในแอปพลิเคชันมือถือได้ หลังจากสร้าง API เมื่อเราเริ่มพัฒนาเว็บไซต์เราสับสนและมีการอภิปรายว่าจะใช้ API หรือเข้าถึงวัตถุธุรกิจโดยตรง และเราก็จบลงหลังจากมีความคิดเห็นจากนักพัฒนาที่มีประสบการณ์มากขึ้นในการใช้ Web API แทนการใช้วัตถุธุรกิจโดยตรง ฉันมีความสับสนเกี่ยวกับโครงสร้างโซลูชันนี้ 1) เหตุใดเราจึงควรใช้ Web API และทำการร้องขอ HTTP (ซึ่งใช้เวลานาน) ในการรับหรือวางข้อมูลแทนที่จะเป็นออบเจ็กต์ธุรกิจโดยตรงซึ่งอยู่ในโซลูชันเดียวกัน 2) หลังจากมีข้อโต้แย้งพวกเขาบอกว่าถ้าลูกค้าต้องการโฮสต์ API และเว็บบนคลาวด์เซิร์ฟเวอร์ที่แตกต่างกันและใช้การปรับขนาดเฉพาะบน API หรืออาจต้องการให้มี URL ที่แตกต่างกันสำหรับการเข้าถึง API และเว็บ (ซึ่งเป็นตรรกะ) ดังนั้นในกรณีนั้นเราควรเรียก Web API จากแอปพลิเคชั่น MVC ในโซลูชันเดียวกันหรือไม่ 3) ถ้าเรากำลังโฮสต์ API และเว็บในการโฮสต์ที่แตกต่างกันนั่นหมายความว่าเว็บของเราจะใช้ WebClient และมีการโทร HTTP ในแต่ละการนำทาง ถูกต้องหรือไม่ …

4
เหตุใดจึงไม่มี WSDL type ที่รองรับ Web Api
ดังนั้นฉันเพิ่งเริ่มต้นกับ. Net WebApi และสิ่งหนึ่งที่ฉันสังเกตเห็นได้ทันทีคือไม่มีสัญญาที่กำหนดว่า API มีลักษณะอย่างไรและควรใช้งานอย่างไร (คำขอ / ตอบจากแต่ละการกระทำ) ซึ่งมักจะอยู่ในรูปแบบของ WSDL สำหรับ WCF / Soap ดูเหมือนว่าฉันจะเป็นสิ่งที่มีค่ามากและทำให้ชีวิตง่ายขึ้นสำหรับผู้บริโภค API ของคุณ มีเหตุผลที่ไม่มีหรือไม่ มีกระบวนทัศน์การเขียนโปรแกรมหรือหลักการที่ฉันไม่ทราบหรือไม่? มีวิธีที่ฉันสามารถสร้างหรือไม่

5
ฉันควรตรวจสอบว่ามีบางสิ่งบางอย่างใน db และล้มเหลวอย่างรวดเร็วหรือรอข้อยกเว้น db
มีสองคลาส: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } เมื่อกำหนดChildIdให้Parentฉันควรตรวจสอบก่อนว่ามันมีอยู่ในฐานข้อมูลหรือรอให้ฐานข้อมูลเกิดข้อยกเว้นหรือไม่ ตัวอย่างเช่น (ใช้ Entity Framework Core): หมายเหตุการตรวจสอบประเภทนี้มีอยู่ทั่วอินเทอร์เน็ตแม้ในเอกสารอย่างเป็นทางการของ Microsoft: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- mvc / handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application # modified-the-department-controllerแต่มีการจัดการข้อยกเว้นเพิ่มเติมสำหรับSaveChanges นอกจากนี้โปรดทราบว่าจุดประสงค์หลักของการตรวจสอบนี้คือการส่งคืนข้อความที่เป็นมิตรและสถานะ HTTP ที่เป็นที่รู้จักแก่ผู้ใช้ API และไม่ละเว้นข้อยกเว้นฐานข้อมูลอย่างสมบูรณ์ และยกเว้นสถานที่เดียวที่จะถูกโยนอยู่ภายในSaveChangesหรือSaveChangesAsyncโทร ... ดังนั้นจะไม่มีข้อยกเว้นใด ๆ เมื่อคุณโทรหรือFindAsync …

6
เหตุใดผู้คนจึงใช้ REST API แทน DBAL
ในอดีตที่ผ่านมาทั้งสอง บริษัท ฉันเคยอยู่ที่ REST API มีอยู่สำหรับการสืบค้นข้อมูลผ่านเว็บแอป กล่าวคือ แทนที่จะมีเว็บแอปทำ SQL โดยตรงจะเรียกใช้ REST API และนั่นคือ SQL และส่งคืนผลลัพธ์ คำถามของฉันคือ ... ทำไมจึงทำเช่นนี้? ถ้ามันจะถูกเปิดเผยต่อบุคคลที่สามฉันสามารถเข้าใจได้ ดีกว่าที่จะเปิดเผย REST API ที่ จำกัด กว่า DB แบบเต็ม แต่ในทั้งสอง บริษัท นี้ไม่ได้เป็นเช่นนั้น มีคนแนะนำฉันว่า REST API เหล่านี้ทำให้การสลับระหว่าง DBMS ง่ายขึ้น แต่นั่นไม่ใช่จุดของ abstraction layer ของฐานข้อมูล (DBAL) ใช่ไหม บางทีคุณอาจใช้ ORM เป็น DBAL ของคุณหรือคุณอาจเขียน SQL ดิบและให้ DBAL …

2
REST API ตามบทบาทหรือไม่
ฉันกำลังสร้าง REST API ซึ่งผู้ใช้หลายคนที่มีบทบาทที่แตกต่างกันจะสามารถเข้าถึงทรัพยากรที่มีอยู่ เพื่อให้ขอบเขตง่ายขึ้นขอโดเมน "นักเรียน / ครู / ชั้นเรียน": GET /students เป็นทรัพยากรที่จะเข้าถึง ผู้ใช้อาจมีบทบาทเช่นนักเรียนและ / หรืออาจารย์ นักเรียนจะสามารถเข้าถึงนักเรียนของชั้นเรียนของพวกเขาเท่านั้น ครูจะสามารถเข้าถึงนักเรียนของชั้นเรียนที่พวกเขาสอน การใช้งานบางอย่างอาจเป็นนักเรียนและสอนชั้นเรียนอื่น ๆ ด้วย พวกเขาจะต้องสามารถเข้าถึงนักเรียนของชั้นเรียนของพวกเขาและนักเรียนของชั้นเรียนที่พวกเขาสอน นึกคิดฉันต้องการที่จะใช้สิ่งนี้เป็นสองฟังก์ชั่น - หนึ่งต่อบทบาทและจากนั้น "สหภาพ" ถ้าผู้ใช้มีหลายบทบาท คำถามของฉันคือฉันควรใช้รูปแบบใดในการดำเนินการนี้ อย่างผิวเผิน ฉันควรแยก API ต่อบทบาทของฉันหรือไม่ GET /teacher/studentsและGET /student/studentsดูเหมือนจะไม่ถูกต้องสำหรับฉัน เก็บทุกอย่างฉันเป็นแหล่งข้อมูลเดียว (แนะนำ) ภายใน ควรนำไปใช้ภายในอย่างไร ทุกวิธีควรเริ่มต้นด้วยสวิตช์ขนาดใหญ่ / ต่อบทบาทหรือไม่ ฉันควรใช้ที่เก็บต่อบทบาทหรือไม่ มีรูปแบบการออกแบบที่จะช่วยฉันในการบรรลุเป้าหมายนี้หรือไม่? ตามความเห็นด้านข้าง: ฉันใช้ASP.NET Web APIและEntity Framework 6แต่จริงๆแล้วมันไม่สำคัญสำหรับการนำแนวคิดไปใช้

3
RESTful API: คำกริยา HTTP กับ URL ที่แชร์หรือเฉพาะ
ในขณะที่สร้างRESTful APIฉันควรใช้ HTTP Verbs บน URL เดียวกัน (เมื่อเป็นไปได้) หรือฉันควรสร้าง URL เฉพาะสำหรับแต่ละการกระทำ ตัวอย่างเช่น: GET /items # Read all items GET /items/:id # Read one item POST /items # Create a new item PUT /items/:id # Update one item DELETE /items/:id # Delete one item หรือด้วย URL เฉพาะเช่น: GET /items # Read …

8
ใช้สตริงว่างเป็นโมฆะหรือลบคุณสมบัติว่างในคำขอ API / ตอบกลับ
เมื่อถ่ายโอนออบเจ็กต์ผ่าน API เช่นเดียวกับในรูปแบบ schemaless JSON วิธีที่เหมาะสมที่สุดในการส่งคืนคุณสมบัติสตริงที่ไม่มีอยู่คืออะไร? ฉันรู้ว่ามีหลายวิธีในการทำเช่นนี้ในตัวอย่างในลิงค์ด้านล่าง หลีกเลี่ยงการเป็นโมฆะ ส่งคืน null ลบคุณสมบัติที่ว่างเปล่า ฉันแน่ใจว่าฉันเคยใช้เป็นโมฆะในอดีต แต่ไม่มีเหตุผลที่ดีที่จะทำเช่นนั้น ดูเหมือนว่าจะใช้ null ทันทีเมื่อจัดการกับฐานข้อมูล แต่ฐานข้อมูลดูเหมือนว่ารายละเอียดการใช้งานที่ไม่ควรเกี่ยวข้องกับฝ่ายที่อยู่อีกด้านหนึ่งของ API เช่นพวกเขาอาจใช้ที่เก็บข้อมูลสกีมาที่เก็บเฉพาะคุณสมบัติที่มีค่า (ไม่ใช่ค่า Null) จากมุมมองของรหัสการ จำกัด ฟังก์ชั่นสตริงให้ใช้งานได้กับประเภทเดียวเท่านั้นคือstring(ไม่ใช่ null) ทำให้ง่ายต่อการพิสูจน์ หลีกเลี่ยงโมฆะก็เป็นสาเหตุของการมีOptionวัตถุ ดังนั้นหากรหัสที่สร้างคำขอ / ตอบสนองไม่ได้ใช้ค่า null ฉันเดาว่าเป็นรหัสที่อีกด้านหนึ่งของ API จะไม่ถูกบังคับให้ใช้ค่า null เช่นกัน ฉันชอบความคิดที่จะใช้สตริงว่างเปล่าเป็นวิธีง่ายๆในการหลีกเลี่ยงการใช้ null อาร์กิวเมนต์หนึ่งที่ฉันได้ยินว่าใช้ null และเทียบกับสตริงว่างคือสตริงว่างหมายความว่ามีคุณสมบัติอยู่ แม้ว่าฉันจะเข้าใจความแตกต่างฉันยังสงสัยว่ามันเป็นเพียงรายละเอียดการใช้งานและถ้าใช้สตริงว่างหรือว่างเปล่าทำให้เกิดความแตกต่างในชีวิตจริง ฉันยังสงสัยว่าสตริงว่างนั้นคล้ายคลึงกับอาร์เรย์ว่างหรือไม่ ดังนั้นวิธีไหนที่ดีที่สุดในการทำสิ่งเหล่านี้ มันขึ้นอยู่กับรูปแบบของวัตถุที่ถูกถ่ายโอน (schema / schemaless) หรือไม่?

6
ตกลงหรือไม่ที่จะมีชั้นตรวจสอบความถูกต้องก่อนเลเยอร์ควบคุมการเข้าถึง
ฉันกำลังสร้างแอปพลิเคชันเว็บที่มีโครงสร้าง API และในแอปพลิเคชันนี้เรามีเลเยอร์ต่างๆที่ทำงานของตนเอง ชั้นแรกคือการตรวจสอบชั้นที่ผู้ใช้ป้อนข้อมูลตรวจสอบและถ้ามันผ่านการตรวจสอบเราย้ายที่ชั้นที่สอง (ซึ่งก็คือการควบคุมการเข้าถึงชั้น) มิฉะนั้นกลับเกิดข้อผิดพลาด เลเยอร์ที่สองคือการควบคุมการเข้าถึงซึ่งตรวจสอบว่าผู้ใช้มีสิทธิ์ในการทำงานที่ต้องการหรือไม่หากผู้ใช้ได้รับอนุญาตจะย้ายคำร้องขอไปยังเลเยอร์ถัดไปมิฉะนั้นจะส่งคืนข้อความแสดงข้อผิดพลาด ชั้นที่สามคือชั้นควบคุมที่เรามีตรรกะของแอปพลิเคชัน คำถามของฉันคือว่าตกลงที่จะมีชั้นตรวจสอบก่อนการควบคุมการเข้าถึง? เกิดอะไรขึ้นถ้าผู้ใช้พยายามที่จะทำงานที่ผู้ใช้ไม่ได้รับอนุญาตและเราจะส่งกลับข้อผิดพลาดการตรวจสอบ? ผู้ใช้จะส่งคำขอไปยังปลายทางและพูดคุยกับเลเยอร์การตรวจสอบและเมื่อผ่านการตรวจสอบแล้วเขาจะเห็นข้อความYou can't access this! ฉันรู้สึกแปลก ๆ ดังนั้นมันดีเหมือนนี้หรืออะไรเป็นทางเลือกอื่นของฉันในโครงสร้างพื้นฐานนี้

1
ทำไมห้องสมุดของ Microsoft ขึ้นอยู่กับ Newtonsoft.Json
สิ่งนี้อาจเริ่มย้อนกลับไปเมื่อ Microsoft สร้างไลบรารี ASP.NET Web API อย่างน้อยนั่นก็คือเมื่อฉันจำได้ถ้าฉันไม่ผิด อย่างไรก็ตามตั้งแต่นั้นเป็นต้นมาแพ็กเกจ HTTP ของมันเริ่มต้นขึ้นอยู่กับไลบรารี Newtonsoft.Json สำหรับการทำให้เป็นอนุกรมของข้อมูล (de) เป็นไปตามและมาจาก JSON ทำไม บริษัท ขนาดใหญ่เท่ากับ Microsoft จะเพิ่มการพึ่งพาในไลบรารีโอเพ่นซอร์ส ฉันคิดว่ามันแปลกแม้ว่าพวกเขาจะไปเปิดแหล่งที่มาอย่างเต็มที่กับ. NET แล้วเพราะมันเป็นห้องสมุดที่ไม่ใช่ Microsoft เท่านั้นที่ใช้เป็นที่พึ่งพึ่งพาเท่าที่ฉันรู้ เป็นคำถามโบนัส James Newton-King ได้รับการสนับสนุนทางการเงินจาก Microsoft หรือไม่
18 .net  asp.net  json  web-api 

2
การเลิกจ้างของ CQRS ไม่ใช่หรือ
ฉันยังจำวันเก่า ๆ ของที่เก็บ แต่ที่เก็บเคยเติบโตน่าเกลียดกับเวลา จากนั้น CQRS จะเป็นกระแสหลัก พวกเขาใจดีพวกเขาสูดอากาศบริสุทธิ์ แต่เมื่อเร็ว ๆ นี้ฉันได้ถามตัวเองซ้ำแล้วซ้ำอีกว่าทำไมฉันถึงไม่รักษาตรรกะในวิธีการของตัวควบคุม (โดยเฉพาะใน Web Api ที่การกระทำเป็นตัวจัดการคำสั่ง / แบบสอบถามในตัวเอง) ก่อนหน้านี้ฉันมีคำตอบที่ชัดเจนสำหรับเรื่องนี้: ฉันทำเพื่อทดสอบเนื่องจากเป็นการยากที่จะทดสอบ Controller ด้วยซิงเกิลที่ไม่สามารถทำการล็อคได้และโครงสร้างพื้นฐาน ASP.NET ที่น่าเกลียดโดยรวม แต่เวลามีการเปลี่ยนแปลงและคลาสโครงสร้างพื้นฐาน ASP.NET นั้นมีการทดสอบหน่วยที่เป็นมิตรมากขึ้นทุกวันนี้ (โดยเฉพาะใน ASP.NET Core) ต่อไปนี้เป็นการเรียก WebApi ทั่วไป: มีการเพิ่มคำสั่งและลูกค้า SignalR จะได้รับแจ้งเกี่ยวกับมัน public void AddClient(string clientName) { using (var dataContext = new DataContext()) { var client = …

4
ใช้การจัดองค์ประกอบและการสืบทอดสำหรับ DTO
เรามี ASP.NET Web API ที่ให้บริการ REST API สำหรับแอปพลิเคชันหน้าเดียวของเรา เราใช้ DTOs / POCO เพื่อส่งผ่านข้อมูลผ่าน API นี้ ปัญหาคือตอนนี้ DTO เหล่านี้เริ่มใหญ่ขึ้นตามกาลเวลาดังนั้นตอนนี้เราต้องการที่จะปรับโครงสร้าง DTO อีกครั้ง ฉันกำลังมองหา "วิธีปฏิบัติที่ดีที่สุด" วิธีการออกแบบ DTO: ขณะนี้เรามี DTO ขนาดเล็กที่ประกอบด้วยเฉพาะเขตข้อมูลประเภทค่าเช่น: public class UserDto { public int Id { get; set; } public string Name { get; set; } } DTO อื่น ๆ ใช้ …
13 rest  api-design  web-api  dto  poco 

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