"Porque há um só Deus,
e um só Mediador entre Deus e os homens, Jesus
Cristo homem."
1 Timóteo 2:5
ASP.NET Core - Apresentando e usando OData - II
Neste artigo vamos apresentar o recurso OData e como podemos usá-lo em aplicações ASP .NET Core para criar Web API Restful com recurso de consultas e filtro flexíveis. |
Continuando a primeira parte do artigo veremos como implementar o OData em nossa API criada no artigo anterior.
A idéia é alterar o mínimo possível o código existente de forma não termos que reescrever nossa API.
Implementando o OData
Abrindo o projeto criado na primeira parte do artigo vamos incluir o pacote Nuget para habilitar o OData em nosso projeto e assim definir consultas mais flexíveis.
Acesse o menu Tools -> Manage Nuget Package For Solutions;
Selecione Browse e localize e instale o pacote : Microsoft.AspNetCore.OData
A seguir abra o arquivo Startup e no método ConfigureServices registrar o serviço OData() via injeção de dependência:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
var connection = @"Data Source=Macoratti;Initial Catalog=EstudoDataBase;Integrated Security=True";
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connection));
services.AddOData();
}
|
A seguir precisamos definir quais as convenções vamos permitir para criar as consultas customizadas que desejamos realizar em nossa API de forma a poder usar a API já pronta sem ter que alterar nada no seu código.
No método Configure vamos habilitar a injeção de dependência para suportar rotas HTTP e a seguir definir quais opções de consultas desejamos habilitar em nossas rotas.
No exemplo estamos habilitando as opções de consulta: Expand(), Select(), Count(), OrderBy() e Filter().
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc(routeBuilder =>
{
routeBuilder.EnableDependencyInjection();
routeBuilder.Expand().Select().Count().OrderBy().Filter();
});
}
|
Para concluir vamos incluir em cada controlador o atributo [EnableQuery]
[EnableQuery] [Route("api/[controller]")] [ApiController] public class AlunosController : ControllerBase { .... } |
[EnableQuery] [Route("api/[controller]")] [ApiController] public class EscolasController : ControllerBase { .... } |
O atributo [EnableQuery] permite que os clientes modifiquem a consulta usando opções de consulta, como $Filter, $Select e $Expand, etc. (Na verdade poderíamos definir o atributo apenas no método HttpGet)
Pronto. Agora podemos executar novamente o projeto e definir consultas flexíveis usando as opções de consulta definidas no método Configure.
Para testar podemos usar o Postman mas como somente estamos fazendo consultas podemos ver o resultado no Browser também.
Para simplificar vou usar o navegador Chrome. Executando o projeto e testando as consultas teremos o resultado a seguir:
1- Selecionar apenas os nomes e notas dos alunos
https://localhost:4430/api/alunos?$Select=Nome,Nota
2- Selecionar apenas os nomes e notas dos alunos e ordernar por nome
https://localhost:4430/api/alunos?$Select=Nome,Nota&$OrderBy=Nome
3- Selecionar apenas os nomes e notas dos alunos com nota menor que 7
https://localhost:4430/api/alunos?$Select=Nome,Nota&$Filter=Nota lt 7
4- Selecionar apenas os nomes e notas dos alunos com nota maior ou igual a 7
https://localhost:4430/api/alunos?$Select=Nome,Nota&$Filter=Nota ge 7
5- Selecionar apenas os nomes e notas dos alunos com nota igual a 8
https://localhost:4430/api/alunos?$Select=Nome,Nota&$Filter=Nota eq 8
Observe que usamos a interrogação (?) para separar os parâmetros da consulta, o caractere (&) para concatenar mais as opções de consulta e que cada opção de consulta é precedida de um caractere $.
Temos assim a implementação de consultas mais flexíveis com filtro, ordenação, etc, em nossa API REst usando os recursos do OData e sem ter que alterar muito o nosso código já existente.
Para realizar operações CRUD teríamos que fazer outras alterações que mostrarei em outro artigo.
Pegue o projeto usado no exemplo aqui: Api_OData1.zip
"Porque há um só Deus,
e um só Mediador entre Deus e os homens, Jesus
Cristo homem."
1 Timóteo 2:5
Referências:
ASP .NET Core 2 - MiniCurso Básico
ASP .NET Core MVC - CRUD básico com ADO .NET
ASP .NET Core - Implementando a segurança com
ASP .NET Core - Iniciando com ASP .NET Core MVC e
ASP .NET Core MVC - Criando um site com MySql e EF
ASP .NET Core - Gerenciador de Despesas Pessoais com
Minicurso ASP .NET Core 2.0 - Apresentando MVC - YouTube
ASP .NET Core - Configurando o ambiente de .
ASP .NET Core e EF Core - Configurando o ambiente
ASP .NET Core - Como configurar o AutoMapper