HotAPI 1.0.9098.953-beta
dotnet add package HotAPI --version 1.0.9098.953-beta
NuGet\Install-Package HotAPI -Version 1.0.9098.953-beta
<PackageReference Include="HotAPI" Version="1.0.9098.953-beta" />
paket add HotAPI --version 1.0.9098.953-beta
#r "nuget: HotAPI, 1.0.9098.953-beta"
// Install HotAPI as a Cake Addin #addin nuget:?package=HotAPI&version=1.0.9098.953-beta&prerelease // Install HotAPI as a Cake Tool #tool nuget:?package=HotAPI&version=1.0.9098.953-beta&prerelease
HotAPI
A biblioteca faz uso dos recursos da biblioteca <a href="https://github.com/mrebello/Hot">Hot</a>, adicionando uma classe para a geração de APIs Web (via Swashbuckle).
Principais recursos implementados:
- Adição de "BindRequired" para todos os parâmetros sem valor default automaticamente
- Utilização do Swashbuckle para gerar a UI e a documentação da API
- Definição do método default (GET/POST/PUT) no arquivo de configuração para métodos que não possuem o atributo definido [HttpGET]/[HttpPOST]/[HttpPUT].
- Documentação através da documentação padrão embutida no fonte do Visual Studio
- Opções de servidor através de arquivo de configuração
- Rotina para atualização facilitada da aplicação em produção
- Implementação usando os padrões do ASP.NET core
BindRequired
Para fazer o BindRequired de forma 'automática', foi utilizado um IParameterFilter que verifica a existência de valor default no parâmetro.
Com isso, a API exposta fica com um comportamento idêntico à assinatura do método declarado no C# (junto com AutoNullable).
AutoNullable
Versão nova do Swagger não faz o retorno automático de nulo para tipos nuláveis. Foi adicionado um filtro para adicionar o IsNullable para os métodos que retornam tipos nuláveis.
Com isso, a API exposta fica com um comportamento idêntico à assinatura do método declarado no C# (junto com BindRequired).
(Funcionando apenas para os típos primitivos)
SwaggerDefaultParameterFrom
O padrão do .NET para parâmetros que não possuem a origem do parâmetro é [FromQuery] para os tipos primitivos. Esta opção troca o padrão para [FromForm] ou outro ("Form", "Query" ou "Header" aceitos).
Documentação
Para a geração da documentação é utilizada a documentação de API do próprio Visual Studio.
Porém, para facilitar o deploy da aplicação, o .xml com a desdcrição da API fica como recurso inserido no executável (ou DLL).
[HttpGET]/[HttpPOST]/[HttpPUT] como default
Uma opção no arquivo de configuração da aplicação define se a HotAPI assume o método GET, POST ou PUT como padrão para os métodos que não estiverem com o atributo, fazendo com que a API possa ser gerada a partir de classes que não dependem de atributos específicos do ASP.NET core.
Expansibilidade
A HotAPI foi construída em cima da arquitetura do ASP.NET core, permitindo que a aplicação se utilize de todos os recursos disponíveis sem limitar aos recursos implementados na HotAPI.
Configuração
Opções disponíveis para a HotAPI (com os valores defaults embutidos na DLL)
{
// ==================
// Opções para HotAPI
// ------------------
"HotAPI": {
"Builder": {
"BindRequiredForNonDefault": true, // Adiciona "BindRequired" para parâmetros sem valor default
"AddEndpointsApiExplorer": true,
"Controllers": true,
"SwaggerGen": true,
"SwaggerGenXML": true, // Gera documentação baseada nos metadados do código
"SwaggerShowHotAPI": "%(IsDevelopment)%", // Se deve mostrar os endpoints internos da HotAPI
"SwaggerResolveConflictingActions": true, // Usa options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
"SwaggerDefaultMethod": "POST" // Método default ("GET","PUT" ou "POST". Se vazio, não assume default) para a UI caso método não possua atributo de método http definido
"SwaggerAutoBindingRequired": true, // define IsBindedRequired para parâmetros que não possuem valor default
"SwaggerAutoNullable": true, // define IsNullable para métodos que possuem retorno nullable
"SwaggerDefaultParameterFrom": "Form" // Define FromForm como padrão de bind para parâmetros de tipos simples (ao invés do padrão FromQuery. Pode ser "Form", "Query" ou "Header"
},
"App": {
"Swagger": true,
"SwaggerUI": true,
"UsePhysicalStaticFiles": true, // Lê recursos estáticos de arquivos na pasta wwwroot da aplicação
"UseEmbeddedStaticFiles": true, // Lê recursos estáticos embuticos na pasta wwwroot da aplicação
"HttpsRedirection": false,
"UseAuthentication": false,
"UseAuthorization": false,
"UseDeveloperExceptionPage": true
}
// "DevelopmentLaunchUrl": "http://127.0.0.1:11051/swagger" // Página a ser aberta se estiver em ambiente de desenvolvimento ao iniciar a aplicação
}
}
Sobre as configurações:
- BindRequiredForNonDefault: Como explicado acima, implementado com um filtro na ApiExplorer
- SwaggerGenXML: Procura pelo arquivo API.xml embutido na aplicação. Se não for encontrado, procura pelo arquivo .xml com o mesmo nome e mesma pasta do executável. Se não encontrar, gera um erro.
- SwaggerShowHotAPI: Esconde da UI do swagger as APIs internas da HotAPI (version, infos e routes). O valor padrão é true caso seja ambiente Development.
- SwaggerResolveConflictingActions: Se true, usa "apiDescriptions ⇒ apiDescriptions.First()".
- DevelopmentLaunchUrl: Se definido, caso esteja em ambiente Development, dispara o browser padrão do sistema (linux/windows) com a ulr definida.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net8.0
- HotLIB (>= 1.0.9098.949-beta)
- Swashbuckle.AspNetCore (>= 7.1.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on HotAPI:
Package | Downloads |
---|---|
HotAPP
Criação de aplicativos Blazor tanto para server quanto para desktop no mesmo código. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.9098.953-beta | 68 | 11/28/2024 |
1.0.8816.682-beta | 112 | 2/20/2024 |
1.0.8816.679-beta | 118 | 2/20/2024 |
1.0.8732.1062-beta | 228 | 11/28/2023 |
1.0.8732.1047-beta | 125 | 11/28/2023 |
1.0.8635.582-beta | 143 | 8/23/2023 |
1.0.8574.1019-beta | 148 | 6/23/2023 |
1.0.8573.719-beta | 155 | 6/22/2023 |
1.0.8564.677-beta | 173 | 6/13/2023 |
1.0.8530.693-beta | 162 | 5/10/2023 |
1.0.8528.760-beta | 147 | 5/8/2023 |
1.0.8518.969-beta | 156 | 4/28/2023 |
1.0.8515.1048-beta | 157 | 4/25/2023 |
1.0.8515.988-beta | 159 | 4/25/2023 |
1.0.8514.592-beta | 147 | 4/24/2023 |
1.0.8511.1306-beta | 169 | 4/22/2023 |
1.0.8507.902-beta | 154 | 4/17/2023 |
1.0.8504.555-beta | 167 | 4/14/2023 |
1.0.1-beta | 163 | 4/11/2023 |
1.0.0 | 253 | 4/11/2023 |