Skip to content

alefcarlos/aspnet-core-webapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aspnet-core-webapi

Esse é um projeto para futuras consultas de técnicas empregadas com ASP.NET Core 2.2 aplicando API-Guidelines da Microsoft.

Técnicas

  • RESTfull
  • Autenticação JWT
  • Swagger
  • Versionamento de API
  • Docker
  • HealthCheck - Utilizando a lib Xabaril/AspNetCore.Diagnostics.HealthChecks
    • Acessar o endpoint /healthz da api no browser
    • Acessar a url http://localhost:8003/healthchecks-ui para visualizar um painel com o monitoramento, disponível somente com docker-compose
  • App.Metrics + Prometheus + Grafana
  • FluentValidation
  • GraphQL
    • Acessar a url /ui/playground no browser
  • EF
    • MySQL
    • Migrations
  • Resiliência requisições Http(utilizando Polly)
    • Retry
    • Timeout
    • CircuitBreaker
  • Caching
    • Redis - Baseado nessa implementação
  • MessageBrokers
    • RabbitMQ
      • - Criação customizada de exchanges/queue por Atributos
  • SonarQube

GraphQL

Para utilizar o GraphQL é necessário ter um token de autenticação Bearer. Acessando a url https://localhost:5001/ui/playground terá disponível uma UI para realizar alguns testes ;)

Para adicionar novos personagens basta realizar as operações do contorller Dragon Ball.

Tipos disponívels:

type Character { id: int, name: string!, bithDate: string!, relatives: [Relative!], kind: Kind! } type Relative { id: int!, name: string!, bithDate: string!, relatives: [Relative!], relativeKind: RelativeKind! } enum Kind {  HUMAN = 1,  SAYAJIN = 2 } enum RelativeKind {  Brother = 1,  Sister = 2,  Son = 3,  Daugther = 4,  Spouse = 5,  Father = 6 ,  Mother = 7 }

Queries disponíveis

characters character(id: int)

Mutations disponíveis

createCharacter(character: Character) 

Docker

O arquivo Dockerfile já contém as instruções necessárias para serem buildadas, vamos executar o comando abaixo para compilar uma imagem.

docker build -t aspnet-core-webapi .

Docker-compose

O arquivo docker-compose.yml já contém as imagens necessárias para rodar a aplicação, basta executar o comando abaixo:

docker-compose build docker-compose up

A porta do container é 80, porém estará pública na porta 8181.

E acessar a página http://localhost:8181/index.html

k8s

Para o exemplo vamos utilizar o docker stack que tem suporte ao Kubernetes.

Docker stack somente suporte imagens já buildadas

Vamos buildar todos os nossos softwares:

docker-compose build

e começar a brincadeira criando o namespace que vamos utilizar:

kubectl create namespace demo

e então criar o stack:

docker stack deploy --namespace demo -c docker-compose.yml appstack

e vamos validar nosso deployment:

kubectl get all -n demo NAME READY STATUS RESTARTS AGE pod/healthapp-78959fcf7b-5xj6b 1/1 Running 0 12s pod/mongodb-d5cc949f5-pqjqs 1/1 Running 0 12s pod/mysqldb-5c8dccbd78-w5f8l 1/1 Running 0 12s pod/rabbitmq-544d746545-hpm7d 1/1 Running 0 12s pod/redis-d56fc6bdf-bmmds 1/1 Running 0 12s pod/web-78bc8955d4-2sjkq 0/1 Error 0 12s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/healthapp ClusterIP None <none> 55555/TCP 12s service/healthapp-published LoadBalancer 10.97.148.148 localhost 8083:30610/TCP 9s service/mongodb ClusterIP None <none> 55555/TCP 9s service/mongodb-published LoadBalancer 10.100.145.160 localhost 27017:30231/TCP 12s service/mysqldb ClusterIP None <none> 55555/TCP 8s service/mysqldb-published LoadBalancer 10.105.66.236 localhost 3306:30969/TCP 12s service/rabbitmq ClusterIP None <none> 55555/TCP 12s service/rabbitmq-published LoadBalancer 10.104.157.0 localhost 5672:31170/TCP,15672:31195/TCP 7s service/redis ClusterIP None <none> 55555/TCP 7s service/redis-published LoadBalancer 10.104.50.187 localhost 6379:30003/TCP 12s service/web ClusterIP None <none> 55555/TCP 12s service/web-published LoadBalancer 10.104.37.39 localhost 8181:30589/TCP 8s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/healthapp 1 1 1 1 13s deployment.apps/mongodb 1 1 1 1 13s deployment.apps/mysqldb 1 1 1 1 12s deployment.apps/rabbitmq 1 1 1 1 13s deployment.apps/redis 1 1 1 1 13s deployment.apps/web 1 1 1 0 13s NAME DESIRED CURRENT READY AGE replicaset.apps/healthapp-78959fcf7b 1 1 1 13s replicaset.apps/mongodb-d5cc949f5 1 1 1 12s replicaset.apps/mysqldb-5c8dccbd78 1 1 1 12s replicaset.apps/rabbitmq-544d746545 1 1 1 13s replicaset.apps/redis-d56fc6bdf 1 1 1 13s replicaset.apps/web-78bc8955d4 1 1 0 13s

Para remover a stack:

docker stack rm appstack --namespace demo

SonarQube

Configuração

Subindo Análise

Releases

No releases published

Packages

No packages published