• 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 /
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
Agenda
• ASP.NET Core: uma visão geral
• Dicas e Exemplos práticos
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
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
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
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
Middlewares
• Elementos centrais na arquitetura do ASP.NET Core
• Middlewares customizados também podem ser
implementados
github.com/renatogroffe/ASPNETCore2.2_API-CustomMiddleware
Removendo valores nulos no retorno de APIs
• Diminuição do tamanho das respostas geradas
por APIs
github.com/renatogroffe/ASPNETCore2.2_RemovendoNullAPIs
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
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
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_WebApp_Monitoramento
Redis: cache em aplicações Web
github.com/renatogroffe/ASPNETCore2.2_Sql_CacheRedis_API
Entity Framework Core
• Compatibilidade com bancos relacionais como
SQL Server, PostgreSQL, MySQL…
github.com/renatogroffe/ASP.NET-Core-2.2_AppInsights_HealthChecks_Predicates
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
O atributo ApiController
• Simplifica a implementação de APIs REST,
eliminando a necessidade de algumas convenções
de código; presente desde o ASP.NET Core 2.1
github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
Dapper.Contrib
• CRUDS implementados com Dapper de forma
mais simplificada
github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
Fluent Validation
• Maior simplicidade e flexibilidade na
implementação de regras de validação
github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
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
ActionResult<T>
• Simplifica a codificação de instruções de retorno
em APIs REST
github.com/renatogroffe/MongoDB-DotNetCore2.2
MongoDB
• Solução NoSQL orientada a documentos e
multiplataforma
github.com/renatogroffe/MongoDB-DotNetCore2.2
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
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
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
IHttpClientFactory + Typed 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
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
JWT (JSON Web Tokens) - Utilização
Um exemplo de token
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
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
Código Resiliente com Polly
• Biblioteca para a implementação de tratamentos
de falha de maneira descomplicada
github.com/renatogroffe/DotNetCore2.2_HttpClient-JWT-Polly
Azure App Service
• Hospedagem de aplicações
• Publicação em Windows ou Linux e também
utilizando imagens Docker
• Suporta diversas stacks de desenvolvimento
• Escalabilidade (vertical e horizontal)
• Suporte a HTTPS
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
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"
.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)
.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
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
medium.com/@renato.groffe/

Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Setembro-2019

  • 2.
    • Microsoft MostValuable 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
  • 4.
    Agenda • ASP.NET Core:uma visão geral • Dicas e Exemplos práticos
  • 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 numaAPI 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 centraisna arquitetura do ASP.NET Core • Middlewares customizados também podem ser implementados github.com/renatogroffe/ASPNETCore2.2_API-CustomMiddleware
  • 10.
    Removendo valores nulosno retorno de APIs • Diminuição do tamanho das respostas geradas por APIs github.com/renatogroffe/ASPNETCore2.2_RemovendoNullAPIs
  • 11.
    Comprimindo a respostano 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 comofiltros • 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 • Novorecurso 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_WebApp_Monitoramento
  • 14.
    Redis: cache emaplicações Web github.com/renatogroffe/ASPNETCore2.2_Sql_CacheRedis_API
  • 15.
    Entity Framework Core •Compatibilidade com bancos relacionais como SQL Server, PostgreSQL, MySQL… github.com/renatogroffe/ASP.NET-Core-2.2_AppInsights_HealthChecks_Predicates
  • 16.
    Dapper: acesso adados 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
  • 17.
    O atributo ApiController •Simplifica a implementação de APIs REST, eliminando a necessidade de algumas convenções de código; presente desde o ASP.NET Core 2.1 github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
  • 18.
    Dapper.Contrib • CRUDS implementadoscom Dapper de forma mais simplificada github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
  • 19.
    Fluent Validation • Maiorsimplicidade e flexibilidade na implementação de regras de validação github.com/renatogroffe/ASPNETCore2.2_DapperContrib_FluentValidation
  • 20.
    Suporte a JSONno 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
  • 21.
    ActionResult<T> • Simplifica acodificação de instruções de retorno em APIs REST github.com/renatogroffe/MongoDB-DotNetCore2.2
  • 22.
    MongoDB • Solução NoSQLorientada a documentos e multiplataforma github.com/renatogroffe/MongoDB-DotNetCore2.2
  • 23.
    API Conventions • Novorecurso 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
  • 24.
    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
  • 25.
    HTTP REPL: testandoAPIs com o .NET Core 2.2 • Utilitário de linha (Global Tool) de comando para teste de APIs REST que tiveram o Swagger habilitado
  • 26.
    IHttpClientFactory + TypedClient • 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
  • 27.
    JWT (JSON WebTokens) • 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
  • 28.
    JWT (JSON WebTokens) - Utilização
  • 29.
  • 30.
    Consumindo uma APIcom Refit • Solução mais simplificada para o consumo de APIs REST, tendo compatibilidade com o .NET Standard github.com/renatogroffe/DotNetCore2.2_Refit-JWT
  • 31.
    Testando APIs RESTcom 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
  • 32.
    Código Resiliente comPolly • Biblioteca para a implementação de tratamentos de falha de maneira descomplicada github.com/renatogroffe/DotNetCore2.2_HttpClient-JWT-Polly
  • 33.
    Azure App Service •Hospedagem de aplicações • Publicação em Windows ou Linux e também utilizando imagens Docker • Suporta diversas stacks de desenvolvimento • Escalabilidade (vertical e horizontal) • Suporte a HTTPS
  • 34.
    Azure Web Appfor 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
  • 35.
    cURL • Utilitário Linux/Unixque 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"
  • 36.
    .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)
  • 37.
    .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
  • 38.
    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
  • 40.