การสำรวจจุดสิ้นสุดที่รวดเร็ว: แนวทางที่ดีกว่าในการสร้าง API (2023)

เมื่อเร็ว ๆ นี้ฉันบังเอิญเจอห้องสมุดชื่อ Fast Endpoints ขณะทำการค้นคว้า และทำให้ฉันรู้สึกว่าเป็นสิ่งที่ฉันต้องการเรียนรู้เพิ่มเติมในทันที ฉันเริ่มทดลองกับ Minimal APIs ในเวลานั้น แม้ว่าฉันจะชอบที่ Minimal APIs ลดจุดเริ่มต้นสำหรับการสร้าง API อย่างง่ายและมีประสิทธิภาพมากกว่า MVC Controllers อย่างเห็นได้ชัด แต่พวกเขาก็เปลี่ยนไฟล์ program.cs ของคุณให้กลายเป็นเรื่องยุ่งเหยิงที่ยุ่งเหยิงด้วยอะไรก็ตามที่นอกเหนือจากเรื่องเล็กน้อยอย่างรวดเร็ว ความต้องการในการจัดระเบียบรหัสอย่างรวดเร็วผลักดันให้หาวิธีที่เหมาะสมในการปรับทิศทางของรหัส

นอกจากนี้ ฉันยังเป็นผู้สนับสนุนอย่างมากในการใช้ไลบรารี Mediatr ในช่วงไม่กี่ปีที่ผ่านมา เนื่องจากมีกลไกที่สะอาดสำหรับการสร้างโค้ดในส่วนแนวตั้งที่รองรับการกำหนดเวอร์ชันและเป็น SOLID อย่างแท้จริง น่าเสียดายที่รูปแบบที่ฉันใช้ยังคงใช้ตัวควบคุม MVC ซึ่งจบลงด้วยการเป็นเลเยอร์แนวนอนน้อยกว่า SOLID ที่เชื่อมโยงสิ่งต่างๆ เข้าด้วยกัน ฉันได้ดูตัวเลือกต่างๆ เพื่อกำจัดคอนโทรลเลอร์ แต่ไม่พบวิธีแก้ปัญหาที่ฉันรู้สึกว่าดีกว่าสิ่งที่ฉันทำอยู่

เนื่องจาก Fast Endpoints บนพื้นผิวดูเหมือนจะเป็นวิธีที่ดีในการจัดระเบียบโค้ดของฉันที่ด้านบนของ Minimal API และจัดการข้อกังวลที่ฉันมีกับ Controllers ร่วมกับ Mediatr ฉันจึงตัดสินใจเจาะลึก หลังจากการประเมินอย่างรวดเร็ว ฉันดำเนินโครงการขนาดเล็กสองสามโครงการด้วย Fast Endpoints พร้อมความสำเร็จอันยิ่งใหญ่

เนื่องจากฉันมีประสบการณ์เกี่ยวกับ Fast Endpoints มาบ้าง ฉันจึงคิดว่ามันน่าจะเป็นแบบฝึกหัดที่ดีที่จะทบทวนบันทึกเก่าของฉันและตอบคำถามเบื้องต้นเมื่อฉันพบ Fast Endpoints เป็นครั้งแรก

ความคิดเบื้องต้นเกี่ยวกับ Fast Endpoints:

  • น่าสนใจ! ดูเหมือน Mediatr แต่กำจัดตัวควบคุม
  • สิ่งนี้ทำให้ผู้ควบคุมเป็นพิธีการที่ไม่จำเป็นสำหรับการสร้างชิ้นส่วนแนวตั้งหรือไม่?

คุณสามารถสร้างชิ้นส่วนแนวตั้งที่ทดสอบได้และ SOLID ด้วย Fast Endpoints ได้หรือไม่

แน่นอน คุณสามารถสร้างชิ้นส่วนแนวตั้งที่ทดสอบได้และ SOLID ด้วย Fast Endpoints ในความเป็นจริงมีเทมเพลต Visual Studio ที่พร้อมใช้งานเพื่อช่วยสร้างจุดสิ้นสุดที่มีการร้องขอ การตอบกลับ ตัวตรวจสอบความถูกต้อง และตัวจัดการผู้รับมอบสิทธิ์ สิ่งนี้คล้ายกับรูปแบบที่ฉันใช้กับ Mediatr แต่กำจัดเลเยอร์คอนโทรลเลอร์

ฉันได้ใช้อัลบาเพื่อทดสอบ API ของฉันสักระยะหนึ่ง และมันทำงานได้อย่างสมบูรณ์แบบกับ Fast Endpoints Alba รวมเซิร์ฟเวอร์ ASP.NET Core Test เพื่อสร้างโฮสต์ทดสอบในหน่วยความจำที่ให้คุณเขียนการทดสอบ XUnit หรือ NUnit กับ API ของคุณได้ นี่เป็นเทคนิคง่ายและรวดเร็วที่ให้ระดับการทดสอบที่ดีที่สุด เนื่องจากจะตรวจจับการเปลี่ยนแปลงที่ไม่คาดคิดในสัญญาของคุณและรวมมิดเดิลแวร์ในการทดสอบ ใช่ นี่เป็นการทดสอบการผสานรวมมากกว่าการทดสอบหน่วย แต่ในกรณีส่วนใหญ่ การทดสอบนี้มีค่ามากกว่าการทดสอบหน่วยรอบ ๆ ตัวจัดการผู้รับมอบสิทธิ์

Fast Endpoints ดีกว่า Minimal API หรือไม่

สำหรับโปรเจ็กต์เล็กๆ น้อยๆ ที่มีปลายทางง่ายๆ หนึ่งหรือสองจุด ฉันยังอาจพิจารณาถึง Minimal API ที่กล่าวว่า ฉันคิดว่าฉันชอบ Fast Endpoints ในเกือบทุกกรณี เพราะมันมีฟีเจอร์อำนวยความสะดวกสำหรับนักพัฒนาจำนวนมากที่ทำให้สิ่งต่าง ๆ เช่น Swagger, Security, Caching และอื่น ๆ ง่ายขึ้นมากและใช้งานได้ทันที

แม้ว่า Fast Endpoint จะช้ากว่า Minimal API เล็กน้อย แต่ก็ยังคงเร็วกว่า MVC Controllers มาก และประโยชน์ของการกำหนดค่าและการจัดระเบียบรหัสที่น้อยลงก็มีมากกว่าประสิทธิภาพที่ลดลงเล็กน้อย

เป็นเรื่องที่น่าแปลกใจที่ Minimal API ทำงานได้เร็วจนเทอะทะด้วยไฟล์ program.cs ที่บวมและการกำหนดค่าอย่างละเอียดรอบ ๆ จุดสิ้นสุดแต่ละจุดที่จำเป็นสำหรับ API ระดับการผลิต Fast Endpoints แก้ปัญหาข้อเสียของ Minimal API เหล่านี้ได้อย่างแน่นอน

มันเร็วกว่าคอนโทรลเลอร์หรือไม่?

มันเร็วกว่าคอนโทรลเลอร์อย่างแน่นอนในแง่ของประสิทธิภาพและประสบการณ์ของนักพัฒนา

การวัดประสิทธิภาพที่เผยแพร่โดย Fast Endpoints ที่นี่:https://fast-endpoints.com/benchmarks#head-to-head-benchmark

เกณฑ์มาตรฐานแสดงคำขอต่อวินาทีมากกว่าตัวควบคุม MVC ถึง 35,000 รายการ ซึ่งช้ากว่า API ขั้นต่ำเล็กน้อย

จากมุมมองด้านประสิทธิภาพการทำงานของนักพัฒนา เมื่อคุณผ่านช่วงการเรียนรู้สั้นๆ แล้ว คุณจะสามารถทำงานได้อย่างมีประสิทธิผลมากขึ้นด้วย Fast Endpoints มีโค้ดที่ต้องเขียนและกำหนดค่าน้อยกว่ามาก และหลายสิ่งหลายอย่างก็ใช้งานได้ทันที จะนำคุณเข้าสู่หลุมแห่งความสำเร็จในการสร้างบริการพร้อมสำหรับการผลิตอย่างแน่นอน

สิ่งนี้นำไปสู่รหัสที่เหมาะกับหัวของคุณหรือไม่?

รูปแบบรอบ Fast Endpoints รองรับโค้ดที่เหมาะกับหัวของคุณอย่างแน่นอน การแบ่งส่วนแนวตั้งนั้นง่ายต่อการสร้างในรูปแบบ SOLID และทดสอบได้ และระดับของการห่อหุ้มและการจัดระเบียบก็ยอดเยี่ยม

ความท้าทายเพียงอย่างเดียวคือเราทุกคนเคยชินกับคอนโทรลเลอร์ ณ จุดนี้ และการทำงานกับ Fast Endpoints ในช่วงแรกอาจรู้สึกสับสนเล็กน้อย จากประสบการณ์ของฉันสิ่งนี้สามารถเอาชนะได้อย่างรวดเร็วและความรู้สึกไม่สบายครั้งแรกก็คุ้มค่ากับผลลัพธ์ที่ได้

การบำรุงรักษารหัส?

Fast Endpoints มอบรูปแบบที่ให้ยืมตัวเองกับโค้ดที่บำรุงรักษาได้อย่างแน่นอน จุดสิ้นสุดแต่ละจุดเป็นชุดของคลาสที่แยกจากกันซึ่งเป็น SOLID การทดสอบสามารถทำได้กับตัวจัดการผู้รับมอบสิทธิ์ แต่ฉันขอแนะนำอย่างยิ่งให้ใช้โฮสต์ทดสอบในหน่วยความจำเช่น Alba แทนการทดสอบตัวจัดการ

การกำหนดเวอร์ชัน API ซึ่งเป็นส่วนประกอบสำคัญของ API ที่บำรุงรักษาได้นั้นยังรองรับด้วย Fast Endpoints อันที่จริง ฉันคิดว่าการกำหนดเวอร์ชันอาจสะอาดกว่าเล็กน้อยในการจัดการกับ Fast Endpoint เนื่องจากจะหลีกเลี่ยงการผสมและจับคู่เวอร์ชันในคลาสคอนโทรลเลอร์เดียวกัน

นอกจากนี้ Fast Endpoints ยังช่วยลดจำนวนของรหัสแผ่นหม้อน้ำที่คุณต้องเขียนเพื่อกำหนดค่าฟังก์ชันระดับการผลิตจำนวนมากของ API การลดลงของสำเร็จรูปส่งผลให้โค้ดน้อยลงในการบำรุงรักษา

ผู้ควบคุมทำอะไรให้เราบ้าง?

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

สิ่งที่น่าพิศวงสำหรับคอนโทรลเลอร์ใน ASP.NET คือข้อเท็จจริงที่ว่า MVC Controllers เป็นหนึ่งในตัวเลือกที่ทำงานช้าที่สุดที่คุณสามารถเลือกได้ในปัจจุบัน

โดยสรุปฉันไม่สามารถนึกถึงสิ่งที่ผู้ควบคุมจัดหาให้ซึ่งจะพลาดไป

ฉันต้องใช้ Mediatr ไหมถ้าเรากำจัดคอนโทรลเลอร์

ฉันได้ข้อสรุปว่า Mediatr จะซ้ำซ้อนอย่างมากในโครงการที่ใช้ Fast Endpoints สิ่งนี้ทำให้ฉันเศร้ามากกว่าการสูญเสียคอนโทรลเลอร์ แต่ท้ายที่สุดแล้ว ฉันยินดีที่จะยอมรับความจริงที่ว่าฉันได้รับประโยชน์จาก Mediatr ด้วยโค้ดที่น้อยลงซึ่งมีการจัดระเบียบที่ดีขึ้น

คุณสามารถนึกถึง Fast Endpoints เช่น Mediatr ที่ไม่มีตัวควบคุมได้หลายวิธี

Fast Endpoints มีแง่มุมใดบ้างที่คาดไม่ถึง

Fast Endpoints มีประโยชน์ที่คาดไม่ถึงมากมาย ซึ่งฉันคิดว่าคุณไม่เข้าใจทั้งหมดจนกว่าคุณจะสร้าง API ที่พร้อมสำหรับการผลิตด้วย Fast Endpoints มีหลายครั้งในการรวบรวม API ที่ฉันพบว่าการกำหนดค่ามีความคล่องตัว

ต่อไปนี้เป็นบันทึกความประทับใจของฉัน:

  • ค่าเริ่มต้นจำนวนมากทำให้คุณพร้อมสำหรับความสำเร็จ
    • JWT Bearer Token ตั้งค่าตามค่าเริ่มต้น
    • ปุ่มอนุญาตบน Swagger เปิดใช้งานโดยค่าเริ่มต้น
    • หลายสิ่งหลายอย่างที่คุณต้องปรับแต่งเทมเพลตตัวควบคุมสไตล์ MVC เพื่อทำ
  • การกำหนดค่าปลายทางแต่ละรายการมีความกระชับและไม่ต้องพึ่งพาการตกแต่งเมธอดด้วยแอตทริบิวต์มากนัก
  • การกำหนดค่าส่วนกลางที่สามารถแทนที่ได้ด้วยอุปกรณ์ปลายทาง
  • ส่วนเสริมที่ยอดเยี่ยมมากมายที่คุณสามารถกำหนดค่าได้อย่างง่ายดาย
    • ขอแคช
    • ขอการควบคุมปริมาณ
    • การจัดการข้อยกเว้น
  • ตัวจัดการก่อน/หลังมีแนวคิดที่เข้าใจง่ายและสามารถกรองได้
    • มิดเดิลแวร์ Asp.net และ Mediatr อาจซับซ้อนสำหรับผู้เริ่มต้น
    • ความสามารถในการกรองตัวจัดการก่อน/หลังได้อย่างง่ายดายทำให้มีความหลากหลายมากขึ้น

ฉันไม่ชอบอะไรเกี่ยวกับ FastEndpoints

มีบางสิ่งที่ฉันไม่สนใจในประสบการณ์ครั้งแรกกับ Fast Endpoints

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

ฉันไม่มีโชคในการใช้บันทึกสำหรับคำขอ ฉันหวังว่านี่จะเป็นหรือจะเป็นความสามารถเพิ่มเติมสำหรับ Fast Endpoints ฉันลงเอยด้วยการตัดสินใจว่าประเภทแผ่นเสียงไม่ใช่ตัวหยุดการแสดงสำหรับฉัน

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

อะไรคือทางเลือกอื่นนอกเหนือจาก Fast Endpoints?

บทสรุป

หลังจากได้รับประสบการณ์กับ Fast Endpoints แล้ว ฉันเชื่อว่านี่คือรูปแบบที่ฉันชอบในอนาคต ฉันขอแนะนำอย่างยิ่งให้โปรเจ็กต์ใหม่ๆ ที่ใช้ .NET เวอร์ชันล่าสุดใช้ Fast Endpoints บน MVC Controllers

ทรัพยากร

Top Articles
Latest Posts
Article information

Author: Rob Wisoky

Last Updated: 05/06/2023

Views: 5241

Rating: 4.8 / 5 (48 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Rob Wisoky

Birthday: 1994-09-30

Address: 5789 Michel Vista, West Domenic, OR 80464-9452

Phone: +97313824072371

Job: Education Orchestrator

Hobby: Lockpicking, Crocheting, Baton twirling, Video gaming, Jogging, Whittling, Model building

Introduction: My name is Rob Wisoky, I am a smiling, helpful, encouraging, zealous, energetic, faithful, fantastic person who loves writing and wants to share my knowledge and understanding with you.