Slides de apresentação sobre o desenvolvimento de APIs REST multiplataforma com o ASP.NET Core. Palestra realizada no dia 04/07/2019 (quinta-feira), em evento promovido pela comunidade .NET SP em São Paulo-SP.
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
2. • Microsoft Most Valuable Professional (MVP)
• Multi-Plataform Technical Audience
Contributor (MTAC)
• Mais de 15 anos de experiência na área de
Tecnologia
• Autor Técnico e Palestrante
• Um dos organizadores do Canal .NET e do
.NET São Paulo
Renato Groffe
h t t p s : / / m e d i u m . c o m / @ re n a t o . g rof f e /
3. Renato Groffe - Contatos
h t t p s : / / m e d i u m . c o m / @ re n a t o . g rof f e /
/renatogroffe /in/renatogroffe
/canaldotnet
/renatogroffe
/canaldotnet
/renatogroff
5. APIs REST - Contexto Atual
• Escalabilidade, disponibilidade e performance
• REST como principal estilo arquitetural
• Microserviços ganhando força
• Economia das APIs
• Emergência do padrão gRPC
6. ASP.NET Core – Visão Geral
• Atualmente na versão 2.2
• .NET Core 3.0 em Preview
• Aplicações Web mais leves e rápidas
• Multiplataforma (execução em Windows, Linux e
Mac)
• Suporte a Docker
7. Injeção de Dependências
• O ASP.NET Core conta desde as primeiras versões com um
mecanismo nativo de injeção de dependências
• Favorece Baixo Acoplamento
github.com/renatogroffe/ASPNETCore2.2_InjDependencias_APIs
8. Retornando XML numa API REST
• Ajuste que pode ser necessário devido à
necessidade de integração com projetos legados
github.com/renatogroffe/ASPNETCore2.2_XML_APIs
9. Middlewares
• Elementos centrais na arquitetura do ASP.NET Core
• Middlewares customizados também podem ser
implementados
github.com/renatogroffe/ASPNETCore2.2_API-CustomMiddleware
10. Removendo valores nulos no retorno de APIs
• Diminuição do tamanho das respostas geradas
por APIs
github.com/renatogroffe/ASPNETCore2.2_RemovendoNullAPIs
11. Comprimindo a resposta no retorno de APIs
• Maior redução do tamanho das respostas geradas
por APIs (GZip, Brotli)
github.com/renatogroffe/ASPNETCore2.2_RemocaoNulls-GZip-MiddlewareFilter
github.com/renatogroffe/ASPNETCore2.2_RemocaoNulls-Brotli-MiddlewareFilter
12. Executando middlewares como filtros
• Possibilidade de aplicar um middleware a uma
Action ou Controller específicos
github.com/renatogroffe/ASPNETCore2.2_RemocaoNulls-GZip-MiddlewareFilter
github.com/renatogroffe/ASPNETCore2.2_RemocaoNulls-Brotli-MiddlewareFilter
13. Health Checks
• Novo recurso do ASP.NET Core 2.2 que permite
monitorar a saúde de uma aplicação Web
github.com/renatogroffe/ASP.NET-Core-2.2_AppInsights_HealthChecks
14. Entity Framework Core
• Compatibilidade com bancos relacionais como
SQL Server, PostgreSQL, MySQL…
github.com/renatogroffe/ASP.NET-Core-2.2_AppInsights_HealthChecks_Predicates
15. Dapper: acesso a dados com maior performance
• Alternativa ao Entity Framework para acesso a
dados relacionais
github.com/renatogroffe/ASPNETCore2.2_APIIndicadores
github.com/renatogroffe/Dapper_ASP.NETCore2.2_One-to-One
github.com/renatogroffe/Dapper_ASP.NETCore2.2_One-to-Many
16. Suporte a JSON no SQL Server
• Evitar a escrita de várias classes para retorno de
informações e operações de transformação de
dados
github.com/renatogroffe/ASPNETCore2.2_SQLServer-JSON
17. Redis: cache em aplicações Web
github.com/renatogroffe/ASPNETCore2.2_Sql_CacheRedis_API
18. Application Insights – Monitorando BDs
• Serviço que integra o Microsoft Azure, estando voltado ao
monitoramento de aplicações Web (sites e serviços)
github.com/renatogroffe/ASP.NET-Core-2.2_AppInsights_HealthChecks_Predicates
19. cURL
• Utilitário Linux/Unix que pode ser útil no envio de
múltiplas requisições testando uma API REST
Envio de 1000 requisições – Exemplo:
curl https://teste?[1-1000] -w "n"
20. ActionResult<T>
• Simplifica a codificação de instruções de retorno
em APIs REST
github.com/renatogroffe/MongoDB-DotNetCore2.2
21. MongoDB
• Solução NoSQL orientada a documentos e
multiplataforma
github.com/renatogroffe/MongoDB-DotNetCore2.2
22. API Conventions
• Novo recurso do ASP.NET Core 2.2 disponibilizado
com o objetivo de simplificar a documentação de
APIs REST com Swagger
github.com/renatogroffe/ASPNETCore2.2_APIIndicadores
23. Documentação/Testes com Swagger
• Geração de um site documentando APIs com
pouquíssimo código, além de contar com
funcionalidades para testes
github.com/renatogroffe/ASPNETCore2.2_APIIndicadores
24. HTTP REPL: testando APIs com o .NET Core 2.2
• Utilitário de linha (Global Tool) de comando para
teste de APIs REST que tiveram o Swagger
habilitado
25. IHttpClientFactory + Named Client
• Alternativa para simplificar o consumo de APIs
REST em projetos ASP.NET Core e que utiliza a
classe HttpClient
github.com/renatogroffe/ASP.NET-Core-2.2_NASA-API
26. JWT (JSON Web Tokens)
• Uso de tokens criptografados
• Bearer Authentication
• Emprega HMAC ou RSA
• Tecnologia multiplataforma
• Tokens formados por 3 partes (Header, Payload e Signature)
github.com/renatogroffe/ASPNETCore2.2_JWT-Identity
29. Consumindo uma API com Refit
• Solução mais simplificada para o consumo de
APIs REST, tendo compatibilidade com o .NET
Standard
github.com/renatogroffe/DotNetCore2.2_Refit-JWT
30. Testando APIs REST com PowerShell
• Solução multiplataforma (Windows, Linux,
macOS)
• Linguagem simples e intuitiva, com suporte à
geração de requisições HTTP
• Desenvolvimento via interface gráfica com
debugging e auto complete: Visual Studio Code
(com extensão própria)
• Excelente alternativa para teste de APIs REST
31. Azure Web App for Containers
• Escalabilidade (vertical e horizontal)
• Suporte a HTTPS
• Uso de images Linux ou Windows
• Ótimo para projetos de médio e pequeno
porte
• Utilizada a imagem
renatogroffe/apicontagem-sdk-2-2
32. Azure Kubernetes Service
• Orquestração de containers na nuvem
• Serviço gerenciado para utilização de um
cluster Kubernetes
• Recomendável para projetos de grande porte
github.com/renatogroffe/ASPNETCore2.2_Kubernetes
33. .NET Core 3.0 – Novo provider de acesso a dados
• Package Microsoft.Data.SqlClient
• Suporte a novos recursos do SQL
Server (Always Encrypted, Data
Classification)
• Ainda não suportado por Dapper,
Entity Framework Core ou Entity
Framework 6
34. .NET Core 3 – Suporte a JSON
• Namespace System.Text.Json e suas
novas classes mais performáticas:
Utf8JsonReader, Utf8JsonWriter,
JsonDocument e JsonSerializer
• Desde o Preview 5 temos suporte à
serialização de classes POCO (ainda
em desenvolvimento)
35. .NET Core 3 – Suporte a JSON
• Projetos Web ao serem não contam mais
com uma referência para o package
Microsoft.AspNetCore.Mvc.NewtonsoftJson
( Preview 6)
• Possibilidade de customizar o uso do novo
Serializer
36. ASP.NET Core 3.0 + gRPC
• Comunicação via HTTP/2 utilizando
um formato binário
• Uso do formato binário Protobuf para
serialização
• Maior performance