تعمل مولدات واجهة برمجة تطبيقات الويب الخاصة بالعميل بقوة على إنشاء رموز واجهة برمجة تطبيقات العميل في C# وTypeScript من واجهة برمجة تطبيقات الويب ASP.NET (الأساسية) مباشرةً دون استخدام Swagger/OpenAPI أو Swashbuckle، وبالتالي زيادة الدعم لأنواع البيانات الخاصة بنهج Code First الخاص بـ ASP.NET Web API. .
منتجات
يقدم هذا المشروع هذه المنتجات:
- منشئ الأكواد البرمجية لواجهة برمجة تطبيقات العميل المكتوبة بقوة في لغة C# التي تدعم .NET وXamarin.Forms.
- مولدات الأكواد البرمجية لواجهة برمجة تطبيقات العميل المكتوبة بقوة في TypeScript لـ jQuery وAngular 2+ وAurelia وAxios وFetch API.
- TypeScript CodeDOM، أحد مكونات .NET CodeDOM لـ TypeScript لتطوير مولدات أكواد TypeScript.
- POCO2TS.exe، وهو برنامج سطر أوامر يقوم بإنشاء واجهات TypeScript من فئات POCO.
- Fonlow.Poco2Ts، وهو مكون يقوم بإنشاء واجهات TypeScript من فئات POCO.
- المكونات الإضافية لـ jQuery وAXIOS وFetch API وAurelia وAngular 2+ بالإضافة إلى النماذج التفاعلية المكتوبة بواسطة Angular.
- Fonlow.DataOnlyExtensions مع محولات JSON لمعالجة سيناريوهات التاريخ فقط بين العملاء والخادم الموجودة في مناطق زمنية مختلفة. تتوفر أيضًا حزمة .NET Framework.
استخدام الحالات والتنزيلات
يتم إصدار المنتجات في الغالب من خلال NuGet.
- أنشئ واجهة برمجة تطبيقات عميل C#، ثم استخدم الحزمة Fonlow.WebApiClientGenCore
- قم بإنشاء واجهة برمجة تطبيقات عميل TypeScript، ثم استخدم أحد المكونات الإضافية لـ Fonlow.WebApiClientGenCore:
- مكتبة المساعدة jQuery وHttpClient
- الزاوي 6+
- Angular 6+، بالإضافة إلى إنشاء FormGroup للنماذج التفاعلية مع الوصف
- أكسيوس
- أوريليا
- جلب واجهة برمجة التطبيقات
- قم بتطوير منشئ كود TypeScript من خلال نهج CodeDOM، ثم استخدم الحزمة Fonlow.TypeScriptCodeDOMCore.
- قم بتطوير منشئ أكواد TypeScript من خلال نهج CodeDOM لـ POCO والمزيد، ثم استخدم الحزمة Fonlow.Poco2TSCore، أو استخدم البرامج النصية PowerShell 7.
- أنشئ واجهات من نوع TypeScript، ثم استخدم Poco2TSCore.exe، وهو تطبيق وحدة تحكم.
- قم بتطوير ميزة تقرأ مستند XML الخاص بتجميع .NET، ثم استخدم الحزمة Fonlow.DocCommentCore.
تلميحات:
- يعد OpenApiClientGen المستند إلى المكونات الرئيسية لـ WebApiClientGen عرضًا فرعيًا لإنشاء رموز واجهة برمجة تطبيقات العميل في C# وTypeScript وفقًا لملف تعريف Swagger/Open API Specification.
- لا يستخدم WebApiClientGen تعريفات Swagger / OpenAPI، ولكنه ينشئ رموزًا من معلومات نوع وقت التشغيل لواجهة برمجة تطبيقات الويب قيد التشغيل لبناء تصحيح الأخطاء، والتخلص من القيود المتأصلة في OpenAPI مقابل أنواع .NET وWeb API لإعطاء تجربة مطور أفضل لـ ASP. NET (الأساسية) Web API.
ملاحظات:
- بدأ التطوير في عام 2015 لدعم .NET Framework، ثم .NET Core 2. والعلامة "LastCore31" هي علامة على اللقطة الأخيرة التي تدعم .NET Framework 4.6.2 و.NET Core 3.1.
- بدءًا من 2021-02-10، سيدعم التطوير فقط .NET 5 وما بعده.
- سيتم الاحتفاظ بمحتويات Wiki الخاصة بـ .NET Framework في المستقبل المنظور.
الميزات الرئيسية
- يتم تعيين رموز واجهة برمجة تطبيقات العميل التي تم إنشاؤها مباشرةً من أساليب وحدة تحكم Web API وأنواع .NET البدائية وفئات POCO. وهذا مشابه لما عرضه svcutil.exe في WCF.
- يتم نسخ تعليقات المستند الخاصة بأساليب التحكم وفئات POCO.
- يتم استخدام بعض سمات التحقق من الصحة لإنشاء تعليقات مستندية لأكواد TypeScript.
الفوائد الرئيسية لتجربة المطور
- تم دمج WebApiClientGen بسلاسة مع ASP.NET Core Web API مع خطوات/تكاليف بسيطة جدًا للإعداد والصيانة والمزامنة بين Web API وواجهات برمجة تطبيقات العميل، أثناء RAD أو Agile Software Development.
- دعم كافة أنواع .NET البدائية بما في ذلك العلامة العشرية.
- دعم DataTime وDataTimeOffset وDateOnly وArray وTuple والكائن الديناميكي والقاموس وKeyValuePair
- تخضع الرموز التي تم إنشاؤها بقوة لفحص نوع وقت التصميم وتجميع فحص نوع الوقت.
- توفير مستوى عالٍ من التجريد، وحماية مطوري التطبيقات من التفاصيل الفنية المتكررة لممارسات RESTful والأكواد التقليدية لاستدعاءات AJAX.
- المعلومات التعريفية الغنية بما في ذلك تعليقات المستندات تجعل IDE intellisense أكثر فائدة، لذلك لا يحتاج مطورو التطبيقات إلى قراءة مستندات API المنفصلة.
- تعليقات المستند التي تم إنشاؤها بناءً على سمات التحقق من صحة .NET.
- تم إنشاء تعليقات المستند استنادًا إلى الأنواع الرقمية والتاريخ فقط والمعرف الفريد العمومي (GUID) لأكواد TypeScript.
- تتوافق رموز TypeScript التي تم إنشاؤها مع الوضع الصارم لـ TypeScript، وتتوافق رموز Angular 2+ التي تم إنشاؤها مع الوضع الصارم Angular.
أمثلة
- فئات بوكو
- واجهة برمجة تطبيقات الويب
- تم إنشاء رموز API C# للعميل
- رموز العميل باستخدام المكتبة التي تم إنشاؤها في C#
- نماذج بيانات العميل التي تم إنشاؤها وواجهة برمجة التطبيقات (API) في TypeScript لـ jQuery وAngular 2 وAurelia وAxios
- رموز العميل باستخدام المكتبة التي تم إنشاؤها في TypeScript
- عرض توضيحي عبر الإنترنت مع Angular Heroes المستضاف في GitHub.IO ويتحدث إلى واجهة خلفية حقيقية
ملاحظات:
- يمكن استخدام أكواد JavaScript التي تم تجميعها من أكواد TypeScript التي تم إنشاؤها في تطبيقات JS، ومع ذلك، من الواضح أنه لن تتوفر معلومات عن النوع، في حين قد يظل مبرمجو التطبيقات يتمتعون بالذكاء والتجريد من تفاصيل AJAX.
- تستخدم تطبيقات React وVue.js عادةً Axios أو Fetch API لطلبات HTTP. منذ يونيو 2019، يدعم babel مساحات الأسماء بفضل طلب السحب هذا، لذا من المفترض أن تكون قادرًا على تنفيذ برمجة React TSX باستخدام أكواد TypeScript التي تم إنشاؤها.
المفاهيم
- يجب على بائعي / مطوري Web API توفير مكتبات API للعميل لمطوري برامج العملاء، كما ستفعل Google وAmazon وما إلى ذلك من أجل جعل RESTful Web API تصل إلى مستهلكين أوسع (داخليين وخارجيين) بكفاءة.
- بالنسبة لمطوري العملاء، فإن النماذج الأولية للوظائف الكلاسيكية مثل
ReturnType DoSomething(Type1 t1, Type2 t2 ...)
هي وظيفة API، والباقي هو تفاصيل التنفيذ الفني للنقل: TCP/IP، HTTP، SOAP، الموجهة نحو الموارد، CRUD- URIs و RESTful و XML و JSON وما إلى ذلك. يجب أن يكون النموذج الأولي للوظيفة وجزء من مستند API جيدًا بما يكفي لاستدعاء وظيفة API. - كلما كان الفصل بين الاهتمامات في تصميم Web API الخاص بك أفضل، كلما استفدت أكثر من مكونات هذا المشروع من أجل تقديم قيم الأعمال في وقت أقرب، مع عدد أقل من الرموز المصنوعة يدويًا، ومهام أقل تكرارًا وفرص أقل للأخطاء البشرية.
ممارسات البرمجة المتوقعة
النموذج الأولي للوظيفة المكتوبة بقوة
ReturnType DoSomething(Type1 t1, Type2 t2 ...)
[ HttpGet ]
[ Route ( "getPerson/{id}" ) ]
public Person GetPerson ( long id )
التحقق من صحة النموذج من خلال البرامج الوسيطة
بدلاً من كتابة أكواد صريحة للتحقق من صحة حمولة الطلب، من المتوقع أن تستخدم برامج وسيطة للتحقق من الصحة. على سبيل المثال:
public void ConfigureServices ( IServiceCollection services )
{
services . AddControllers (
options =>
{
options . Filters . Add ( new ValidateModelAttribute ( ) ) ; // wholesale style to check model binding for all API calls.
مراجع:
- التحقق من صحة النموذج في ASP.NET Web API
- التحقق من صحة النموذج في ASP.NET Core MVC وصفحات Razor
التحقق من صحة النموذج من خلال ApiControllerAttribute
على سبيل المثال:
[ ApiController ]
[ Route ( "api/[controller]" ) ]
public class HeroesController : ControllerBase
{
رموز حالة HTTP غير 2xx التي تتم معالجتها بواسطة البرامج الوسيطة، اختيارية
حتى إذا قمت بكتابة الأكواد بشكل صريح في وظيفة واجهة برمجة التطبيقات (API) للتعامل مع الاستثناءات وإرجاع رمز حالة HTTP بخلاف 2xx، فيجب أن يكون لديك شبكة آمنة لالتقاط الاستثناءات غير المكتشفة وإرجاع رموز حالة HTTP.
مراجع:
- البرمجيات الوسيطة الأساسية لـ ASP.NET
المتطلبات الأساسية
جانب الخادم:
- صافي 7/8
- إضافة CodeGenController.
- في رموز بدء تشغيل الخدمة، أضف ما يلي:
services . AddControllers (
options =>
{
#if DEBUG
options . Conventions . Add ( new Fonlow . CodeDom . Web . ApiExplorerVisibilityEnabledConvention ( ) ) ;
#endif
}
)
ملاحظات:
- تقوم Microsoft بإصدار ترقية رئيسية لـ .NET (Core) كل عام منذ عام 2016، وستتبع المكتبات الموجودة في هذا المستودع بشكل عام آخر تحديث بعد حوالي نصف عام.
- المكتبات العامة مزودة بإصدار .NET واحد خلف الإصدار الأحدث، في حين أن تطبيق ASP.NET Demo ومجموعات اختبار التكامل مع واجهة برمجة تطبيقات عميل .NET التي تم إنشاؤها هي مع الإصدار الحالي من .NET.
جانب عميل .NET:
- .NET Framework 4.5.2، أو Universal Windows، أو Mono.Android، أو Xamarin.iOS، أو .NET Core 2.0/2.1/3 و.NET 5
- مكتبات عميل ASP.NET Web API 2.2
- Json.NET من Newtonsoft لتطبيق Content-Type/json
- أدوات بناء مايكروسوفت 2015
NewtonSoft.Json أو System.Text.Json
اعتبارًا من .NET 7، لإجراء التسلسل، يقوم System.Text.Json بإعادة تجميع أكثر من 95% من NewtonSoft.Json. لا يوجد سوى عدد قليل من الحالات الطرفية لهياكل POCO المعقدة التي لا يستطيع System.Text.Json التعامل معها.
يدعم WebApiClientGen كلا من جانب الخادم وجانب العميل C#. بالنسبة لعملاء C#، يمكنك استخدام "UseSystemTextJson" في إعدادات إنشاء التعليمات البرمجية.
ومع ذلك، إذا كان تطبيقك يتضمن هياكل POCO معقدة، فإن استخدام NewtonSoft.Json يعد رهانًا آمنًا اعتبارًا من .NET 7.
جانب عميل TypeScript:
- مترجم تايب سكريبت
- مسج
- الزاوي 2-17
- أوريليا
- أكسيوس
- جلب واجهة برمجة التطبيقات
لمزيد من التفاصيل، يرجى مراجعة:
- ويكي
- وأوضح الإعدادات
- إنشاء C# .NET Client API لـ ASP.NET Web API
- إنشاء واجهة برمجة تطبيقات عميل TypeScript لـ ASP.NET Web API
- ASP.NET Web API وAngular2 وTypeScript وWebApiClientGen
- إنشاء C# Client API لـ ASP.NET Core Web API
- الحلول المقصودة للقيود المتعمدة لمولدات عملاء OpenAPI المكتوبة بقوة. تستخدم المقالة OpenApiClientGen كمثال فقط، بينما يمكن تطبيق المبادئ والحلول على الأكواد التي تم إنشاؤها بواسطة WebApiClientGen لتطبيقات العميل لديك.
- التاريخ فقط في ASP.NET Core 6
التطبيقات التجريبية
التطبيقات التجريبية الموجودة في هذا المستودع مخصصة بشكل أساسي لاختبار WebApiClientGen أثناء التطوير. وهناك تطبيقات تجريبية أخرى في المستودعات التالية، مما يوضح كيف يمكن لتطبيقات العالم الحقيقي استخدام WebApiClientGen:
- أمثلة WebApiClientGen لـ .NET Framework و.NET Standard وXamarin وvue TS.
- عرض .NET Core لـ ASP.NET Core MVC وWeb API وASP.NET Core + Angular وMAUI وfetchAPI وvue TS وReact TS.
- WebApiClientGen مقابل Swagger
تتم صيانة هذه التطبيقات التجريبية بشكل نشط ويتم تحديثها بأحدث أطر العمل. إذا كنت لا تزال تستخدم بعض الأطر القديمة مثل Angular 4 أو 5 أو .NET Core 2.0، فيمكنك الانتقال إلى العلامات الخاصة بالمستودعات والخروج.
جولة الأبطال
Tour of Heroes هو التطبيق التجريبي التعليمي الرسمي لـ Angular.
لتوضيح تجربة المبرمج في استخدام WebApiClientGen، تم تصميم التطبيقات التجريبية التالية بتصميم معماري مماثل لنفس الميزات الوظيفية في أطر التطوير أو المكتبات المختلفة، ومع ذلك، فإنها تتحدث إلى واجهة خلفية حقيقية.
- Angular 2+، والنماذج التفاعلية المكتوبة
- زامارين
- ماوي. هاجر من أبطال Xamarin.
- أوريليا. وشملت مجموعة اختبار التكامل.
- رد فعل. وشملت مجموعة اختبار التكامل.
- بليزر مستقل
NewtonSoft.Json أو System.Text.Json
بينما يدعم WebApiClientGen كليهما، فقد تحول الدعم الأساسي إلى System.Text.Json منذ عام 2024.
لا يزال لدى NewtonSoft.Json بعض المزايا في سيناريوهات وسياقات معينة:
- إذا كان لديك الكثير من فئات POCO المزينة بواسطة DataContractAttributes، بسبب دعم التطبيقات القديمة، أو دعم تسلسل XML وJSON، فإن NewtonSoft.Json يمنحك دعمًا متأصلًا، بينما يوفر System.Text.Json بعض الدعم المزعج وغير المباشر منذ .NET 7.
- بالنسبة لبعض أنواع المصفوفات والديناميكية، لا يزال NewtonSoft.Json أفضل.