sexta-feira, 14 de abril de 2023

IdentityUser - Exemplo Prático

 É uma biblioteca de gerenciamento de usuários da Microsoft para ASP.NET. Ela é chamada de Identidade (Identity) ASP.NET. Ela contém recursos, incluindo hash de senha, validação de senha, armazenamento de usuários e gerenciamento de reivindicações. Ela normalmente inclui alguns recursos básicos de autenticação, como cookies e autenticação multifator. Ela pode até mesmo introduzir sua própria interface de usuário em alguns casos.

Todas as estruturas, incluindo MVC ASP.NET, Web Forms e Web Pages, podem usar o ASP.NET Identity. As informações do usuário são armazenadas em um banco de dados por padrão no ASP.NET Identity. Também é viável armazenar dados em uma variedade de provedores de armazenamento, dependendo das necessidades do aplicativo. SharePoint, serviços de tabela do Azure e outras fontes de dados (exemplos de provedores de dados).

No ASP.NET Identity, a autorização baseada em função também é muito significativa. Agora podemos definir facilmente funções como "Administrador", "Cliente" e assim por diante, o que nos permite atribuir usuários a essas funções e restringir seu acesso a algumas áreas do programa.

O Identificador de ASP.NET é um divisor de águas, pois introduz a Autenticação de Dois Fatores em seu aplicativo Web.

Porém, ela possui um conjunto muito limitado de propriedades, mas é possivel extender. É isso que você irá aprender agora.

 

public class IdentityUser<TKeywhere TKey : IEquatable<TKey>

{

    public IdentityUser() { }

    public IdentityUser(string userName) : this()

    {

        UserName = userName;

    }

    [PersonalData]

    public virtual TKey Id { getset; }

    [ProtectedPersonalData]

    public virtual string UserName { getset; }

    public virtual string NormalizedUserName { getset; }

    [ProtectedPersonalData]

    public virtual string Email { getset; }

    public virtual string NormalizedEmail { getset; }

    [PersonalData]

    public virtual bool EmailConfirmed { getset; }

    public virtual string PasswordHash { getset; }

    public virtual string SecurityStamp { getset; }

    public virtual string ConcurrencyStamp { getset; } = Guid.NewGuid().ToString();

    [ProtectedPersonalData]

    public virtual string PhoneNumber { getset; }

    [PersonalData]

    public virtual bool PhoneNumberConfirmed { getset; }

    [PersonalData]

    public virtual bool TwoFactorEnabled { getset; }

    public virtual DateTimeOffset? LockoutEnd { getset; }

    public virtual bool LockoutEnabled { getset; }

    public virtual int AccessFailedCount { getset; }

    public override string ToString()

        => UserName;

}

  

Estender IdentityUser Class

Você pode nomear a classe que estende a classe IdentityUser como quiser, mas é costume nomeá-la como ApplicationUser. No exemplo abaixo, a classe ApplicationUser  estende a classe IdentityUser .

 public class ApplicationUser : IdentityUser

{

    public string City { getset; }

}

Para encontre todas as referências da classe IdentityUser e substitui-la por nossa classe personalizada ApplicationUser , clique com o botão direito do mouse na classe IdentityUser e, em seguida, selecionar "Localizar todas as referências" no menu de contexto. Navegue até cada referência na lista e substitua a classe IdentityUser pela classe ApplicationUser.

 



Especifique a classe ApplicationUser como o argumento genérico para a classe IdentityDbContext. É assim que a classe IdentityDbContext sabe que precisa trabalhar com nossa classe de usuário personalizada (neste caso, a classe ApplicationUser) em vez da classeIdentityUser interna padrão.

public class AppDbContext : IdentityDbContext<ApplicationUser>

{

    public AppDbContext(DbContextOptions<AppDbContext> options)

        : base(options)

    { }

 

    public DbSet<Employee> Employees { getset; }

 

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        base.OnModelCreating(modelBuilder);

        modelBuilder.Seed();

    }

}

  

Gerar uma nova migração para adicionar colunas à tabela AspNetUsers

Add-Migration Extend_IdentityUser, este comando gera o código de migração necessário para adicionar a coluna Cidade à tabela AspNetUsers.

 

Extend_IdentityUser de classe parcial pública : Migração

{

protected override void Up(MigrationBuilder migrationBuilder)

    {

migrationBuilder.AddColumn<string>(

nome: "Cidade",

tabela: "AspNetUsers",

anulável: verdadeiro);

    }

 

protected override void Down(MigrationBuilder migrationBuilder)

    {

migrationBuilder.DropColumn(

nome: "Cidade",

tabela: "AspNetUsers");

    }

}

 

Em seguida, aplique a migração ao banco de dados usando o seguinte comando: Update-Database

 

 

Estendendo IdentityUser - Add-Migration Não está funcionando

Se a classe ApplicationUser (a classe que estende a classe IdentityUser) não for especificada como o argumento genérico para a classe IdentityDbContext, o comando Add-Migration não funcionará. Ele não gera o código de migração necessário para adicionar as colunas adicionais à tabela de identidade AspNetUsers.Para corrigir isso, especifique a classe ApplicationUser como o argumento genérico para a classe IdentityDbContext.

 

public class AppDbContext : IdentityDbContext<ApplicationUser>

{

    public AppDbContext(DbContextOptions<AppDbContext> options)

        : base(options)

    { }

 

    public DbSet<Employee> Employees { getset; }

 

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        base.OnModelCreating(modelBuilder);

        modelBuilder.Seed();

    }

}

 

Se você obtiver a seguinte exceção, a causa mais provável é em algum lugar com em seu aplicativo você ainda está usando classe IdentityUser em vez da classe ApplicationUser.

 

No service for type 'Microsoft.AspNetCore.Identity.SignInManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' has been registered.

 

No Visual Studio, procure a classe IdentityUser em todo o aplicativo usando CTRL + SHIFT + F

 


 

Substitua a classe IdentityUser pela classe ApplicationUser e execute novamente o projeto.

 

Para poder armazenar dados para a coluna Cidade personalizada na tabela AspNetUsers precisamos alterar

· RegisterViewModel classe

· Registrar Visualização

· Registrar ação no AccountController

 

Classe RegisterViewModel Esta é a classe de modelo para o modo de exibição Register. Modifique-o para incluir a propriedade City.

 

public class RegisterViewModel{

    // Other Properties

    public string City { getset; }

}

 

Register View

inclua um campo para capturar um valor para a Cidade.

 

@model RegisterViewModel

 

@{

    ViewBag.Title = "User Registration";

}

 <h1>User Registration</h1>

 

<div class="row">

    <div class="col-md-12">

        <form method="post">

            <div asp-validation-summary="All" class="text-danger"></div>

            <div class="form-group">

                <label asp-for="Email"></label>

                <input asp-for="Email" class="form-control" />

                <span asp-validation-for="Email" class="text-danger"></span>

            </div>

 

            @*Other Fields*@

 

            <div class="form-group">

                <label asp-for="City"></label>

                <input asp-for="City" class="form-control" />

            </div>

 

            <button type="submit" class="btn btn-primary">Register</button>

        </form>

    </div>

</div>

 

AccountController - Ação de registro

· Preencha a propriedade City da instância ApplicationUser que é passada para o método CreateAsync() da classe UserManager.

· Os dados na instância ApplicationUser são salvos na tabela AspNetUsers pela classe IdentityDbContext.

 

[HttpPost]

[AllowAnonymous]

public async Task<IActionResult> Register(RegisterViewModel model)

{

    if (ModelState.IsValid)

    {

        var user = new ApplicationUser

        {

            UserName = model.Email,

            Email = model.Email,

            City = model.City

        };

 

        var result = await userManager.CreateAsync(user, model.Password);

 

        if (result.Succeeded)

        {

            await signInManager.SignInAsync(user, isPersistent: false);

            return RedirectToAction("index""home");

        }

 

        foreach (var error in result.Errors)

        {

            ModelState.AddModelError(string.Empty, error.Description);

        }

    }

 

    return View(model);

}

segunda-feira, 13 de março de 2023

Visual Studio 2020 - Onde Está WEB FORMS?

Se você instalou o Visual Studio Communit 2022, deve estar se perguntando: Onde está o projeto Aplicativo Web ASP.NET.

Se você gosta de criar aplicativos utilizando Web Forms, não se preocupe. É bem fácil adicionar este recurso no Visual Studio 2022. Siga os passos a seguir:


1. Na Janela Criar um Novo Projeto,  clique no link Instalar mais ferramentas e funcionalidades




2. Na janela seguinte, Modificando  - Visual Studio 2022. Clique sobre a guia Componentes Individuais



3. Marque a opção Modelo de projeto e item do .NET Framework



Após isso, você poderá criar seus projetos utilizando o Visual Studio 2022

Até a próxima.


        

 

  

quinta-feira, 9 de fevereiro de 2023

SQL - Retornar Valores de Datas em Anos

DATEDIFF

Retorna a diferença entre valores de data, em anos. O retorno é do tipo int.


SintaxeDATEDIFF ( datepart , startdate , enddate )


Nota:  Unidades datepart comumente usadas incluem monthousecond.O valor datepart não pode ser especificado em uma variável, nem como uma string entre aspas como 'month'.


A tabela a seguir lista todos os valores datepart válidos. DATEDIFF aceita o nome completo do datepart ou qualquer abreviação listada do nome completo.

nome da dataabreviação de data e parte
anoy, yy, yyyy
trimestreqq, qq
mêsmm, m
dia do anovocê
diadd, d
semanawk, ww
horahh
minutomi, n
segundoss, s
milissegundoEM
microssegundomcs
nanossegundons

A diferença int entre startdate e enddate , expressa no limite definido por datepart.

limites do datepart

SELECT DATEDIFF(year,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter,     '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month,       '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear,   '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day,         '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(microsecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');



FLOOR

Retorna o maior inteiro menor ou igual à expressão numérica especificada.



SintaxeFLOOR ( numeric_expression )


Argumentosnumeric_expression, é uma expression da categoria de tipo de dados numéricos exatos ou aproximados, com exceção do tipo de dados bit.


Tipo de retorno, retorna o mesmo tipo que numeric_expression.



Exemplos


-- O resultado é a parte inteira do valor calculado no mesmo tipo de dados que numeric_expression.

SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45);


-- Exibe ano e Mês

  SELECT DATEDIFF(DAY,'1980-10-01', GETDATE()) / 365.25


  -- Exibe apenas anos

  SELECT FLOOR(DATEDIFF(DAY,'1980-10-01', GETDATE()) / 365.25)


  -- Exibe a data atual

  SELECT GETDATE()


  -- Soma dez dias a data atual

  SELECT GETDATE() + 10

terça-feira, 7 de fevereiro de 2023

Criptomoedas e Blockchain

 CRIPTOMOEDAS

 

Criptoativos representam todas as transações realizadas com valores criados digitalmente e independentes de instituições financeiras, como as criptomoedas. Exemplos de moedas.

Bitcoin, Ether, Polygon e Chainlink.

A moeda foi criada em 2008 por Satoshi Nakamoto. Registrada com o domínio bitcoin.org, ela entrou em circulação em 2009. Inicialmente, não teve tanto protagonismo no mercado regular, mas isso não demorou para mudar.

 

O que são criptomoedas?

Banco XP: Criptomoedas são moedas digitais que utilizam a tecnologia blockchain. A Criptografia da blockchain permitiu o surgimento não só de Criptomoedas, mas de Utility Tokens, Secutity Tokens e NFTs.

Banco Modal: Criptomoedas são criptoativos utilizados para pagamentos e demais transações financeiras realizadas, exclusivamente, de forma virtual, que podem ser utilizadas em qualquer parte do mundo. Em resumo: elas não “existem” fisicamente.

Por não deixar nenhum tipo de “rastro”, já que são criadas e monitoradas por inúmeras pessoas, utilizando blockchain, as criptomoedas têm sido a principal forma de pagamento de hackers ao invadirem sistemas corporativos de empresas privadas ou públicas.

Portanto, uma das principais diferenças entre esse tipo de moeda e as fiduciárias (como o dólar, o real etc.) é que elas são totalmente digitais. Dessa forma, todas as transações que as envolvem precisam ser realizadas pela Internet. Por ser uma moeda virtual e, dessa forma, não existir fisicamente, as criptomoedas são utilizadas somente para pagamentos e demais transações financeiras realizadas, exclusivamente, em ambiente virtual, em qualquer parte do mundo.

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)";



segunda-feira, 11 de abril de 2022

SQL - VEIRFICAR SE EXISTE REGISTROS DUPLICADOS

Veja como é simples verificar se existe algum registro duplicado um tabela


SELECT [NomeArquivo], Count(*) FROM [colpo_RegistroItens]

GROUP BY [NomeArquivo]

HAVING Count(*) > 1

sexta-feira, 8 de abril de 2022

NODE JS

O Node.js é um ambiente de runtime JavaScript do lado do servidor, de software livre e multiplataforma baseado no mecanismo JavaScript V8 do Chrome, originalmente criado por Ryan Dahl e lançado em 2009. Sim, ele é uma tecnologia usada para executar código JavaScript fora do navegador.

Com ele podemos construir aplicações web em geral, desde web sites até APIs e microsserviços. Isso é possível graças a união do ambiente de execução de JavaScript fornecido pelo próprio Node.js e o motor de interpretação e execução de JavaScript presente no Google Chrome, chamado de V8.

 

O Node.js funciona no Windows?

Sim. O Windows dá suporte a dois ambientes diferentes para o desenvolvimento de aplicativos com o Node.js:

 

O que você pode fazer com o NodeJS?

O Node.js é usado principalmente para criar aplicativos Web rápidos e escalonáveis. Ele usa um modelo de E/S controlado por evento e sem bloqueio, tornando-o leve e eficiente. É uma ótima estrutura para aplicativos em tempo real que usam muitos dados e que são executados em dispositivos distribuídos. Aqui estão alguns exemplos do que você pode criar com o Node.js.

  • SPAs (aplicativos de página única) : são aplicativos Web que funcionam dentro de um navegador e não precisam recarregar uma página sempre que você usá-la para obter novos dados. Alguns exemplos de SPAs incluem aplicativos de rede social, aplicativos de mapa ou email, texto online ou ferramentas de desenho etc.

  • RTAs (aplicativos em tempo real) : são aplicativos Web que permitem aos usuários receber as informações assim que publicadas por um autor, em vez de exigir que o usuário (ou software) verifique uma fonte periodicamente em busca de atualizações. Alguns exemplos de RTAs incluem aplicativos de mensagens instantâneas ou salas de chat, jogos com vários jogadores online que podem ser reproduzidos no navegador, documentos de colaboração online, armazenamento da Comunidade, aplicativos de videoconferência etc.

  • Aplicativos de streaming de dados: são aplicativos (ou serviços) que enviam dados/conteúdo à medida que chegam (ou são criados) e ao mesmo tempo mantêm a conexão aberta para continuar baixando dados, conteúdo ou componentes adicionais, conforme necessário. Alguns exemplos incluem aplicativos de streaming de vídeo e áudio.

  • APIs REST: são as interfaces que fornecem dados para interação com o aplicativo Web de outra pessoa. Por exemplo, um serviço de API de Calendário pode fornecer datas e horas para um local de show que poderia ser usado pelo site de eventos locais de outra pessoa.

  • Aplicativos SSR (renderizados do lado do servidor): esses aplicativos Web podem ser executados no cliente (no navegador/front-end) e no servidor (o back-end), permitindo que as páginas dinâmicas exibam (gerem HTML para) qualquer conteúdo conhecido e extraiam rapidamente conteúdo não conhecido quando disponível. Eles são frequentemente chamados de aplicativos "isomórficos" ou "universais". Os SSRs utilizam métodos SPA, de modo que não precisam ser recarregados toda vez que forem usados. No entanto, os SSRs oferecem alguns benefícios que podem ou não ser importantes para você, como fazer com que o conteúdo do seu site apareça nos resultados da pesquisa do Google e fornecer uma imagem de visualização quando os links para seu aplicativo são compartilhados em mídias sociais, como o Twitter ou o Facebook. A possível desvantagem é que ele exige um servidor Node.js em constante execução. A título de exemplo, um aplicativo de rede social com suporte a eventos que os usuários desejam que apareçam nos resultados da pesquisa e em mídias sociais pode se beneficiar de SSR, mas aplicativos de email podem se beneficiar mais de SPA. Você também pode executar aplicativos não SPA renderizados pelo servidor, como um blog do WordPress. Como podemos ver, conforme as coisas vão ficando complicadas, você precisa decidir o que é importante.

  • Ferramentas da linha de comando: permitem automatizar tarefas repetitivas e, em seguida, distribuir sua ferramenta pelo vasto ecossistema Node.js. Um exemplo de ferramenta de linha de comando é cURL, que representa a URL do cliente e é usada para baixar conteúdo de uma URL da internet. A cURL geralmente é usada para instalar itens como Node.js ou, em nosso caso, um gerenciador de versão do Node.js.

  • Programação de hardware: embora não seja tão conhecido quanto os aplicativos Web, o Node.js vem crescendo em popularidade para usos de IoT, como coletar dados de sensores, sinalizadores, transmissores, motores ou qualquer item que gere grandes quantidades de dados. O Node.js pode habilitar a coleta e análise de dados, a comunicação entre um dispositivo e um servidor e a execução de ações com base na análise. O NPM contém mais de 80 pacotes para controladores Arduino, Raspberry Pi, Intel IoT Edison, vários sensores e dispositivos Bluetooth.