quinta-feira, 23 de junho de 2022

Docker. O que é? Porque Utilizar?

 O que é o Docker?

 

Docker é uma plataforma open source que facilita a criação e administração de ambientes isolados. Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container, se tornando portátil para qualquer outro host que contenha o Docker instalado.

Ele permite, criar, implantar, copiar e migrar de um ambiente para outro com muita flexibilidade.

A ideia do Docker é subir apenas uma máquina, ao invés de várias. E, nessa única máquina, você pode rodar várias aplicações sem que haja conflitos entre elas.

O Docker é algo parecido com uma máquina virtual extremamente leve, mas não se trata de uma máquina virtual. O Docker usa containers que possuem uma arquitetura diferente, permitindo maior portabilidade e eficiência. O container exclui a virtualização e muda o processo para o Docker.  

Nota: Docker é uma empresa especializada no provisionamento de um conjunto de tecnologias e ferramentas para a criação e gestão de containers. O trabalho da Docker foi tão bem sucedido que a tecnologia criada por ela acabou se tornando o mecanismo padrão no mercado para containers.

 

O que são esses containers?

Um container é um ambiente isolado utilizado para empacotar aplicações. Um container contém um conjunto de processos que são executados a partir de uma imagem, que fornece todos os arquivos necessários.

Os containers compartilham o mesmo kernel e isolam os processos da aplicação do restante do sistema.

Sua aplicabilidade serve como base para o modelo DevOps e auxilia as áreas de Operações e Desenvolvimento. No desenvolvimento, os containers empacotam aplicações com suas dependências, permitindo serem acessíveis e compartilhadas. Já em operações, são processos de aplicações rodando em um kernel compartilhado, mais simples que máquinas virtuais.

Como o container possui uma imagem que contém todas as dependências de um aplicativo, ele é portátil e consistente em todas as etapas de desenvolvimento. Essa imagem é um modelo de somente leitura que é utilizada para subir um container.

Vale lembrar que, apesar do Docker ter sido desenvolvido inicialmente com base na tecnologia LXC (Linux Containers), hoje essa tecnologia tornou-se independente de sistema operacional: podemos utilizar o Docker em ambientes Linux, Windows e até mesmo MacOS.

 

Por que utilizar o Docker?

Pelas vantagens que ele oferece como:

Economia de recursos;

Melhor disponibilidade do sistema (compartilhamento do SO e de outros componentes);

Possibilidades de compartilhamento, simplicidade de criação e alteração da infraestrutura;

Manutenção simplificada (reduzindo o esforço e o risco de problemas com as dependências do aplicativo.

 

 

Testando serviços Web API com Postman

Tem se tornado muito comum no universo do desenvolvimento de sistemas a criação de serviços sendo construída sob o modelo REST,  realizando a troca de mensagens através de requisições HTTP.

Neste cenário, os serviços HTTP não possuem interface gráfica com o usuário. Então, para testar esse tipo de aplicação você poderá utilizar o Postman, Imagine, você não precisa usar seu tempo e recursos criar uma interface gráfica para testar um serviço.

O Postman, permite realizar requisições HTTP a partir de uma interface simples e intuitiva, facilitando o teste e depuração de serviços REST.

Veja como é fácil testar um serviço ASP.NET Web API, enviando e recebendo dados no formato JSON.

 

Instalando o Postman

Ele pode ser instalado a partir da Chrome Web Store. Aqui ele será usado como um aplicativo externo ao Chrome, diferente das versões anteriores em que era aberto em uma aba como extensão. Se você desejar poderá criar uma conta e armazenar suas informações em um servidor do Postman, compartilhando assim seus testes e variáveis entre vários dispositivos onde você fizer login;

Ser usado na Web;

Ser baixado para o Windows.

 

Nota: O Postman pode ser usado para testar qualquer serviço HTTP RESTful.

Se você estiver usando o Microsoft Visual Studio, você poderá criar um novo projeto utilizando o template API Web do ASP.NET Core

Execute a aplicação e abra o Postman. Faremos uso dos verbos http para testar nossa API Web.

 

Apenas um lembrete:

GET  - listar dados

POST  - adiciona novos dados

PUT - substitui dados existentes

DELETE  - exclui dados existentes

PATCH - atualizar alguns campos de dados existentes


Para fazermos o teste, devemos adicionar o endereço de nossa aplicação, seguido de /api/ e o nome da entidade (exemplo: /api/Book)

O Postman, nos permite ver o status da operação (200, 204, ...)

No caso do POST, precisaremos fazer algumas configurações antes. Definir como Body, selecionar a opção “raw” (pois informaremos o conteúdo da mensagem) e o formato que poderá ser “JSON (application/json)”

Se você tentar inserir um novo registro com um ID que já existente, um status 409 – Conflict será retornado

 Para usar o  PUT o formato é bem semelhante as configurações anteriores. Porém se você usar um ID inexistente, um status 404 – Not Found, será retornado

O DELETE, é o mais simples adicione o id no final da URL e o ID que deseja excluir

Outra particularidade do Postman, é podermos trabalhar em equipes, customizar ambientes de teste, importar arquivos com requisições pré-definidas, entre outras.

O Postman ajuda a simplificar os testes,  pois ele nos podemos facilmente enviar requests HTTP para serviços RESTful, enviando parâmetros e recebendo as devidas respostas, além de analisar o tempo gasto em cada requisição, o que também pode auxiliar na localização de problemas de desempenho.

A ferramenta possui ampla documentação. Ele ainda conta com uma versão paga com recursos adicionais que irão ajudar aos desenvolvedores mais avançados.

quarta-feira, 15 de junho de 2022

Task - namespace System.Threading.Tasks

     Uma tarefa (task) representa uma unidade de trabalho que deverá ser realizada. Esta unidade de trabalho pode rodar em uma thread separada e é também possível iniciar uma task de forma sincronizada a qual resulta em uma espera pela thread chamada. Com tasks, você tem uma camada de abstração mas também um bom controle sobre as threads relacionadas.

    As tasks permitem muito mais flexibilidade na organização do trabalho. Por exemplo, você pode definir continuar o trabalho, que deve ser feito depois que uma tarefa esteja completa. Isso pode diferenciar se um tarefa foi executada com sucesso ou não. Você também pode organizar as tarefas em uma hierarquia onde uma tarefa pai pode criar novas tarefas filhas que pode criar dependências e assim o cancelamento da tarefa pai também cancela suas tarefas filhas.

    Para iniciar uma tarefa, você pode usar a classe TaskFactory ou o construtor da classe Task e o método Start().

    O construtor Task lhe dá mais flexibilidade na criação da tarefa. Ao iniciar uma tarefa, uma instância da classe Task pode ser criada e o código que deve ser executado pode ser atribuído com uma Action ou delegate Action<object> tanto sem parâmetro como com um parâmetro object.

    A classe Task também fornece construtores que inicializam a tarefa, mas que não a agendam para execução. Por razões de desempenho, o método StartNew da classe TaskFactory deve ser o mecanismo preferido para criação e programação de tarefas, mas, para situações em que a criação e programação devem ser separadas, os construtores podem ser usados, e o método Start() da tarefa pode então ser utilizado para programar a tarefa para execução em um momento posterior.

    O método Task.WhenAll aguarda assincronamente múltiplas operações assíncronas que são representadas através de uma coleção de tarefas. Usamos o método Task.WhenAll em um conjunto de tarefas. A aplicação de WhenAll retorna uma única tarefa que não está completa até que cada tarefa na coleção seja concluída. As tarefas parecem ser executadas em paralelo, mas não são criados novas threads.

segunda-feira, 13 de junho de 2022

IEntityTypeConfiguration

Namespace:: Microsoft.EntityFrameworkCore

Assembly:: Microsoft.EntityFrameworkCore.dll

Ele se aplica as versões: 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0

 

Permite que a configuração de um tipo de entidade seja fatorada em uma classe separada, e não em linha OnModelCreating(ModelBuilder)

Implemente essa interface, aplicando a configuração para a entidade no método  Configure(EntityTypeBuilder<TEntity>) e, em seguida, aplique a configuração ao modelo usando ApplyConfiguration<TEntity> em: OnModelCreating(ModelBuilder).

O parâmetro é do tipo: TEtity (O tipo de entidade a ser configurado)

Default Column Type

 Permite definir o padrão do tipo de dados da coluna no banco de dados.


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var property in modelBuilder
.Model
.GetEntityTypes()
.SelectMany(
e => e.GetProperties()
.Where(p => p.ClrType == typeof(string))))
{
property.Relational().ColumnType = "varchar(100)";
}
}


Para definir o tipo de dados da coluna no banco de dados necessitamos utilizar o seguinte código:

property.Relational().ColumnType = "varchar(100)";