Esta biblioteca contém uma coleção de auxiliares, modelos e métodos de extensão que ajudam a reduzir o tempo e a cerimônia para melhorar uma API WebApi/RESTful ASP.NET-Core MVC.
Isso adiciona todos os itens, usando as configurações padrão (conforme listado abaixo). Simples, rápido e incrível.
Adicione ambos.
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 uma versão mais personalizada:
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);
}
Caso contrário, você pode escolher quais itens deseja.
Ótimo para APIs, isso criará a rota padrão "root/home" => HTTP GET /
with:
Banner opcional - algum texto (como ASCII ART)
Crie informações sobre uma montagem.
public void ConfigureServices(IServiceCollection services)
{
var someASCIIArt = "... blah .."; // Optional.
services.AddControllers()
.AddAHomeController(services, someASCIIArt);
}
Por exemplo, saída
___ ___ ___ ___ ___ ___ ___ ___
/__ / / /__ / / / / ___
/:/ / /:: /:: /::| | /:: : /:: /:: /
/:/__/ /:/: /:/: /:|:| | /:/: : /:/: /:/: :
/:: ___ /:/ : /::~: /:/|:| |__ /::~: /:: /::~: /::~: /::__
/:/: /__ /:/__/ :__ /:/: :__ /:/ |:| /__ /:/: :__ /:/:__ /:/: :__ /:/: :__ __/://__/
/__:/:/ / : /:/ / /_|::/:/ / /__|:|/:/ / :~: /__/ /:/ /__/ /__:/:/ / /__:/:/ / //:/ /
::/ / : /:/ / |:|::/ / |:/:/ / : :__ /:/ / ::/ / ::/ / ::/__/
/:/ / :/:/ / |:|/__/ |::/ / : /__/ /__/ /:/ / /__/ :__
/:/ / ::/ / |:| | /:/ / :__ /:/ / /__/
/__/ /__/ |__| /__/ /__/ /__/
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
Todas as respostas são JSON e formatadas usando as configurações JSON comuns:
Nomes de propriedades CamelCase.
Formatação recuada.
Ignore propriedades nulas que possuem valores.
Enums são renderizados como string
's ... não como valor numérico de apoio.
Pode especificar um modelo de formato DateTime personalizado.
// 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);
}
Modelo de exemplo/objeto de domínio:
new FakeVehicle
{
Id = 1,
Name = "Name1",
RegistrationNumber = "RegistrationNumber1",
Colour = ColourType.Grey,
VIN = null
});
Texto JSON do resultado:
{
"id": 1,
"name": "Name1",
"registrationNumber": "RegistrationNumber1",
"colour": "Grey"
}
Observação sobre a formatação DateTime padrão do .NET Core.
Por padrão, ele usa o formato ISO 8601-1:2019. Isso significa que se houver alguns microssegundos, eles serão renderizados. Se não houver nenhum -> nenhum microssegundo será renderizado. Isso pode dificultar para alguns consumidores desses dados (por exemplo, aplicativos iOS Swift que consomem uma API .NET Core), para que você possa codificar um modelo de formato específico para obter uma saída consistente.
OpenAPI (usando a biblioteca Swashbuckle) foi conectado e permite que você defina o title
e version
desta API e também um route prefix
personalizado (o que é bom para uma API de gateway com vários endpoints OpenAPI porque cada microsserviço tem seu próprio documento 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());
}
Discussões e solicitações pull são incentivadas :) Faça todas as perguntas gerais neste repositório ou escolha um repositório especializado para problemas específicos e direcionados. Também temos um documento de contribuição que detalha como fazer isso.
Sim, também temos um código de conduta que se aplica a todos os repositórios da organização (GitHub) Homely.
Sim, consulte a página de contribuição sobre a melhor forma de dar feedback - seja bom ou que precise de melhorias :)