Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

alefcarlos/aspnet-core-webapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

113 Commits

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

AltStyle によって変換されたページ (->オリジナル) /