تحتوي هذه المكتبة على مجموعة من المساعدين والنماذج وطرق الامتداد التي تساعد على تقليل الوقت والمراسم لتحسين ASP.NET-Core MVC WebApi/RESTful API.
يؤدي هذا إلى إضافة كافة العناصر باستخدام الإعدادات الافتراضية (كما هو موضح أدناه). بسيطة وسريعة ورائعة.
أضف كلاهما.
public void ConfigureServices(IServiceCollection services)
{
// - Home controller but no banner.
// - Default json options: camel casing, no indention, nulls ignored and enums as strings.
// - OpenApi adeed.
services.AddControllers()
.AddDefaultWebApiSettings(); // Can also be totally customized.
}
public void Configure(IApplicationBuilder app)
{
// - Problem details
// - OpenAPI
// - Authorisation
// - Endpoints (with MapControllers)
app.UseDefaultWebApiSettings();
}
أو نسخة أكثر تخصيصًا:
public void ConfigureServices(IServiceCollection services)
{
// - Home controller but no banner.
// - Default json options: camel casing, no indention, nulls ignored and enums as strings.
// - OpenApi adeed.
var banner = " -- ascii art --";
var isStackTraceDisplayed = _webHostEnvironment.IsDevelopment();
var isJsonIndented = _webHostEnvironment.IsDevelopment();
var jsonDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ" // No milliseconds.
var openAPITitle = "My API";
var openAPIVersion = "v1";
var openAPICustomOperationIdSelector = new Func<ApiDescription, string>((apiDescrption, string) => { .. // refer to sample code in website } );
services.AddControllers()
.AddDefaultWebApiSettings(banner,
isStackTraceDisplayed,
isJsonIndented,
jsonDateTimeFormat,
openAPITitle,
openAPIVersion,
openAPICustomOperationIdSelector)
}
public void Configure(IApplicationBuilder app)
{
// - Problem details
// - OpenAPI (Customised)
// - Authorisation
// - Endpoints (with MapControllers)
var useAuthorizatoin = true;
var openAPITitle = "My API";
var openAPIVersion = "v1";
var openAPIRoutePrefix = "swagger";
app.UseDefaultWebApiSettings(useAuthorization,
openAPITitle,
openAPIVersion,
openAPIRoutePrefix);
}
بخلاف ذلك، يمكنك اختيار العناصر التي تريدها واختيارها.
يعد هذا أمرًا رائعًا بالنسبة لواجهات برمجة التطبيقات، حيث سيؤدي ذلك إلى إنشاء المسار الافتراضي "الجذر/المنزل" => HTTP GET /
مع:
شعار اختياري - بعض النص (مثل ASCII ART)
بناء معلومات حول التجمع.
public void ConfigureServices(IServiceCollection services)
{
var someASCIIArt = "... blah .."; // Optional.
services.AddControllers()
.AddAHomeController(services, someASCIIArt);
}
على سبيل المثال الإخراج
___ ___ ___ ___ ___ ___ ___ ___
/__ / / /__ / / / / ___
/:/ / /:: /:: /::| | /:: : /:: /:: /
/:/__/ /:/: /:/: /:|:| | /:/: : /:/: /:/: :
/:: ___ /:/ : /::~: /:/|:| |__ /::~: /:: /::~: /::~: /::__
/:/: /__ /:/__/ :__ /:/: :__ /:/ |:| /__ /:/: :__ /:/:__ /:/: :__ /:/: :__ __/://__/
/__:/:/ / : /:/ / /_|::/:/ / /__|:|/:/ / :~: /__/ /:/ /__/ /__:/:/ / /__:/:/ / //:/ /
::/ / : /:/ / |:|::/ / |:/:/ / : :__ /:/ / ::/ / ::/ / ::/__/
/:/ / :/:/ / |:|/__/ |::/ / : /__/ /__/ /:/ / /__/ :__
/:/ / ::/ / |:| | /:/ / :__ /:/ / /__/
/__/ /__/ |__| /__/ /__/ /__/
S E R V I C E -> A C C O U N T S
Name: ApiGateway.Web
Version: 3.1.0.0
Build Date : Sunday, 7 June 2020 2:41:53 PM
Application Started: Monday, 8 June 2020 12:02:37 PM
Server name: PUREKROME-PC
جميع الاستجابات بتنسيق JSON ومنسقة باستخدام إعدادات JSON الشائعة:
أسماء خصائص CamelCase.
التنسيق بمسافة بادئة.
تجاهل الخصائص الخالية التي لها قيم.
يتم تقديم التعدادات string
... وليس قيمة رقم الدعم الخاصة بها.
يمكن تحديد قالب تنسيق DateTime مخصص.
// Simplest : i
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddDefaultJsonOptions();
}
or
// All options...
public void ConfigureServices(IServiceCollection services)
{
var isIndented = true;
string dateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ" // No milliseconds.
services.AddControllers()
.AddDefaultJsonOptions(isIndented, dateTimeFormat);
}
نموذج النموذج/كائن المجال:
new FakeVehicle
{
Id = 1,
Name = "Name1",
RegistrationNumber = "RegistrationNumber1",
Colour = ColourType.Grey,
VIN = null
});
نتيجة نص JSON:
{
"id": 1,
"name": "Name1",
"registrationNumber": "RegistrationNumber1",
"colour": "Grey"
}
ملاحظة حول تنسيق .NET Core DateTime الافتراضي.
افتراضيًا، يستخدم تنسيق ISO 8601-1:2019. وهذا يعني أنه إذا كان هناك بعض الميكروثانية، فسيتم عرضها. إذا لم يكن هناك شيء -> فلن يتم عرض أي ميكروثانية. قد يجعل هذا من الصعب على بعض مستهلكي هذه البيانات (مثل تطبيقات iOS Swift التي تستهلك واجهة برمجة تطبيقات .NET Core) حتى تتمكن من ترميز قالب تنسيق معين للحصول على مخرجات متسقة.
تم توصيل OpenAPI (باستخدام مكتبة Swashbuckle) ويسمح لك بتحديد title
version
واجهة برمجة التطبيقات هذه وأيضًا route prefix
مخصصة (وهو أمر جيد لواجهة برمجة تطبيقات البوابة ذات نقاط نهاية OpenAPI المتعددة لأن كل خدمة صغيرة لها مستند OpenAPI الخاص بها ).
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddCustomOpenApi("Test API", "v2");
}
public void Configure(IApplicationBuilder app)
{
app.UseCustomOpenApi("accounts/swagger", "Test API", "v2")
.UseRouting()
.UseEndpoints(endpoints => endpoints.MapControllers());
}
يتم تشجيع المناقشات وطلبات السحب :) يرجى طرح جميع الأسئلة العامة في هذا الريبو أو اختيار ريبو متخصص لقضايا محددة ومستهدفة. لدينا أيضًا وثيقة مساهمة تتناول التفاصيل حول كيفية القيام بذلك.
نعم، لدينا أيضًا قواعد سلوك تنطبق على جميع المستودعات في مؤسسة (GitHub) Homely.
نعم، ارجع إلى صفحة المساهمة حول أفضل السبل لتقديم التعليقات - سواء كانت جيدة أو لتحسين الاحتياجات :)