Cette bibliothèque contient une collection d'assistants, de modèles et de méthodes d'extension qui permettent de réduire le temps et les cérémonies nécessaires à l'amélioration d'une API ASP.NET-Core MVC WebApi/RESTful.
Cela ajoute tous les éléments, en utilisant les paramètres par défaut (comme indiqué ci-dessous). Simple, rapide et génial.
Ajoutez les deux.
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();
}
ou une version plus personnalisée :
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);
}
Sinon, vous pouvez choisir les éléments que vous souhaitez.
Idéal pour les API, cela créera la route "root/home" par défaut => HTTP GET /
avec :
Bannière facultative - du texte (comme ASCII ART)
Générez des informations sur un assembly.
public void ConfigureServices(IServiceCollection services)
{
var someASCIIArt = "... blah .."; // Optional.
services.AddControllers()
.AddAHomeController(services, someASCIIArt);
}
Par exemple, sortie
___ ___ ___ ___ ___ ___ ___ ___
/__ / / /__ / / / / ___
/:/ / /:: /:: /::| | /:: : /:: /:: /
/:/__/ /:/: /:/: /:|:| | /:/: : /:/: /:/: :
/:: ___ /:/ : /::~: /:/|:| |__ /::~: /:: /::~: /::~: /::__
/:/: /__ /:/__/ :__ /:/: :__ /:/ |:| /__ /:/: :__ /:/:__ /:/: :__ /:/: :__ __/://__/
/__:/:/ / : /:/ / /_|::/:/ / /__|:|/:/ / :~: /__/ /:/ /__/ /__:/:/ / /__:/:/ / //:/ /
::/ / : /:/ / |:|::/ / |:/:/ / : :__ /:/ / ::/ / ::/ / ::/__/
/:/ / :/:/ / |:|/__/ |::/ / : /__/ /__/ /:/ / /__/ :__
/:/ / ::/ / |:| | /:/ / :__ /:/ / /__/
/__/ /__/ |__| /__/ /__/ /__/
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
Toutes les réponses sont JSON et formatées à l'aide des paramètres JSON courants :
Noms de propriétés CamelCase.
Formatage en retrait.
Ignorez les propriétés nulles qui ont des valeurs.
Les énumérations sont rendues sous forme de string
... et non de leur valeur numérique de support.
Peut spécifier un modèle de format DateTime personnalisé.
// 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);
}
Exemple d'objet modèle/domaine :
new FakeVehicle
{
Id = 1,
Name = "Name1",
RegistrationNumber = "RegistrationNumber1",
Colour = ColourType.Grey,
VIN = null
});
Texte JSON du résultat :
{
"id": 1,
"name": "Name1",
"registrationNumber": "RegistrationNumber1",
"colour": "Grey"
}
Remarque sur le formatage .NET Core DateTime par défaut.
Par défaut, il utilise le format ISO 8601-1:2019. Cela signifie que s'il reste quelques microsecondes, elles sont restituées. S'il n'y en a pas -> aucune microseconde n'est rendue. Cela peut rendre la tâche difficile pour certains consommateurs de ces données (par exemple, les applications iOS Swift consommant une API .NET Core), afin que vous puissiez coder en dur un modèle de format spécifique pour obtenir une sortie cohérente.
OpenAPI (utilisant la bibliothèque Swashbuckle) a été câblé et vous permet de définir le title
et version
de cette API ainsi qu'un route prefix
personnalisé (ce qui est bon pour une API de passerelle avec plusieurs points de terminaison OpenAPI car chaque microservice a son propre document 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());
}
Les discussions et les demandes de tirage sont encouragées :) Veuillez poser toutes les questions générales dans ce dépôt ou choisir un dépôt spécialisé pour des problèmes spécifiques et ciblés. Nous avons également un document de contribution qui explique en détail comment procéder.
Oui, nous avons également un code de conduite qui s'applique à tous les référentiels de l'organisation (GitHub) Homely.
Oui, reportez-vous à la page de contribution pour savoir comment donner au mieux des commentaires - qu'ils soient bons ou à améliorer :)