softwares Prazer, Analu. Sou desenvolvedora back-end, instrutora de programação, tech lead na {Reprograma}, community manager no Java Girls JUG e Engenheira de Software no Itaú Unibanco eu 27 anos, São Paulo Engenheira de Softwares
conta github, o gitbash na sua maquina configure e garanta que você consegue acessar sua conta do github pelo gitbash você tem o vscode, gitbash e insomnia na sua maquina @analu.io Se tem dúvidas sobre git e github veja meu material em: https://github.com/analuizasampaio/ apostila-github-basico
pelo Cliente: Manipulação de tela Interpretação de menus ou comandos Entrada e validação dos dados Recuperação de erro Manipulação de janelas Gerenciamento de som e vídeo (em aplicações multimídia) Client é a interface que os usuários interagem, é essa camada que é responsável de solicitar serviços e informações de um ou mais servidores.
os dados compartilhados Fazer a comunicação com o Banco de Dados Atualizar dados previamente armazenados Gerenciamento dos recursos compartilhados. O Servidor é o responsável pelo processo, organização e gerenciamento das informações. É ele que responde às solicitações feitas pelo Client. Ele é um processo reativo, disparado pela chegada de pedidos de seus clientes Client Server Banco de dados
uma requisição A pagina é renderizadas e aparece na tela É dada uma Resposta @analu.io O que acontece quando acessamos um site? https://tfunicamp.com.br/
domínio, normalmente é por ele que acessamos e conhecemos o Site. Porém, no Server esse site não está registrado pelo nome de domínio, e sim pelo endereço de IP Internet Protocol Address é o endereço exato de onde o site está dentro do servidor. Então, antes de uma requisição ser feita o dominio deve virar o IP, e pra isso, usamos o DNS, o Domain Name System (Sistema de Nome de Domínio) que é como um grande dicionario de domínio para IP que já vem "de fábrica" no browser www.reprograma.com.br 128.195.116.204 www.google.com www.gov.br 23.146.231.43 162.29.146.27
Resource Locator (localizador de recurso uniforme). Ela representa o local/Host que estão localizados os recursos www.reprograma.com.br 23.146.231.43 tfunicamp.com.br/ <endereço do servidor> Para entendermos uma URI precisamos entender a URL e a URN. URL
Resource Name (Nome de Recursos Universal). Ela representa um recurso específico na web que está sendo acessado www.reprograma.com.br 23.146.231.43 /contato <recurso> /cronograma <recurso> /patrocinadores <recurso> URN
página html, imagem, video ou qualquer outro arquivo web tem um endereço dentro da internet, esse endereço é a URI URI – Uniform Resource Identifier (Identificador de Recursos Universal). É o identificador contendo que une o protocolo http + o localizador do recurso (URL) + nome do recurso (URN) www.reprograma.com.br 23.146.231.43 https:// tfunicamp.com.br /cronograma <protocolo> <endereço do servidor> <recurso> protocolo URL URN
o Client faz uma requisição, ou Request, cheio de informações desejadas. Pra que isso aconteça, tanto o Server quando o Client devem "falar a mesma lingua". 23.146.231.43 Client Server Banco de dados Na maioria dos casos, essa comunicação entre Server e Client é feita a partir do Protocolo HTTP
de Hipertexto, o HTTP, é um protocolo usado dentro do modelo Client/Server é baseado em pedidos (requests) e respostas (responses). HTTP request Client HTTP response Server O protocolo HTTP define um conjunto de métodos de requisição responsáveis por indicar a ação a ser executada. Eles são chamados de Verbos HTTP ou Métodos HTTP.
corresponde a uma ação real no banco de dados. Os verbos HTTP mais utilizados são: GET POST PUT PATCH DELETE GET POST PUT PATCH DELETE ler criar substituir modificar excluir CRUD é a composição da primeira letra de 4 operações básicas de um banco de dados, e são o que a maioria das aplicação faz ✅ C: Create (criar) - criar um novo registro 👁 R: Read (ler) - exibir as informações de um registro ♻️ U: Update (atualizar) - atualizar os dados do registro ❌ D: Delete (apagar) - apagar um registro
Request o Server envia um Response. E na resposta tem, além do resultado do que foi pedido, um código de status numérico padronizado 100-199 informação sucesso redirecionamento erro do cliente erro de servidor 200-299 300-399 400-499 500-599 código tipo de resposta
HTTP response HTTP request HTTP response 100-199 informação sucesso redirecionamento erro do cliente erro de servidor 200-299 300-399 400-499 500-599 código tipo de resposta GET POST PUT PATCH DELETE ler criar substituir modificar excluir verbo ação
construir as telas bonitas e funcionais focadas no usuário. Elas tem que criar aplicações preparadas para enviar Requests corretamente e receber as Responses, também disponibilizar de forma performática para os usuários Dentro desse fluxo, são as pessoas que constroem toda a dinâmica do recebimento de Requests, o envio das Responses corretas, o tratamento das Responses, as solicitações de execuções de ação no Banco de Dados, conexão com outras aplicações ou sistemas e ainda a disponibilização de tudo da forma mais simples possível para a Dev Front. Dev Front @analu.io Dev Back
criar formas e ferramentas de se usar uma funcionalidade ou uma informação sem realmente ter que "reinventar a tal função." Interface de Programação de Aplicativos Ela não necessariamente está num link na Web, ela pode ser uma lib ou um framework, uma função já pronta em uma linguagem especifica, etc.
acesso a um aplicativo de software. Uma empresa de software lança sua API para o público de modo que outros criadores de software possam desenvolver produtos acionados por esse serviço. Web APIs @analu.io
com restrição minima. Podem precisar de cadastro, o uso de API Key ou ser completamente abertas. Elas estão relacionadas com uso externo de dados ou serviços. APIs Publicas @analu.io
um conjunto de restrições e boas praticas utilizadas para que as requisições HTTP atendam as diretrizes definidas na arquitetura. APIs REST e RESTfull @analu.io todas as APIs RESTful são APIs REST, mas nem todas as APIs REST são necessariamente RESTful API REST refere-se à abordagem arquitetural em si, descrevendo os princípios gerais que guiam a criação de serviços web. API RESTful é uma implementação específica de uma API que adere aos princípios do REST, seguindo as diretrizes e boas práticas estabelecidas.
operações em recursos. Usa URIs (Uniform Resource Identifiers) para identificar e acessar recursos. Retorna dados no formato JSON ou XML. Stateless: Cada solicitação HTTP contém todas as informações necessárias para ser processada pelo servidor. Os métodos HTTP são mapeados para operações CRUD no servidor. APIs REST e RESTfull @analu.io Foca em recursos (entidades de negócio) e ações sobre esses recursos usando métodos HTTP. Utiliza URIs amigáveis e semânticas para identificar e acessar recursos. Fornece respostas bem estruturadas e padronizadas usando os códigos de status HTTP apropriados. Pode implementar a negociação de conteúdo, permitindo que os clientes solicitem dados em diferentes formatos (JSON, XML, etc.). Pode oferecer suporte a HATEOAS (Hypertext As The Engine Of Application State), permitindo a descoberta dinâmica de recursos relacionados por meio de links.
troca de dados. É em formato de texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens C e familiares, incluindo C++, C#, Java, JavaScript, Perl, Python e muitas outras. Estas propriedades fazem com que JSON seja um formato ideal de troca de dados. JSON @analu.io JSON é baseado em duas estruturas: Uma coleção de pares de nome / valor. Em várias linguagens, isso é realizado como um objeto, registro, estrutura, dicionário, tabela de hash, lista de chaves ou matriz associativa. Uma lista ordenada de valores. Na maioria das linguagens, isso é realizado como um array, vetor, lista ou sequência. .
em um objeto JavaScript padrão. Porem, diferente das Arrays e Objetos os nomes das propriedades devem ser strings com aspas duplas e as vírgulas à direita são proibidas. JSON @analu.io
2009... Node.js Interpretador JavaScrypt que não precisa de navegador. Ele pode: Ler e escrever arquivos no seu computador Conectar com um banco de dados Se comportar como um servidor @analu.io node -v
pela letra R 👁 R: Read (ler) - exibir as informações de um registro O Client manda um request solicitando realizar um GET e o Server deve estar preparado para receber esse GET e responde-lo com um response. Client Server GET todos HTTP request HTTP response HTTP request HTTP response GET por id GET por nome
pela letra C ✅ C: Create (criar) - criar um novo registro Client Server HTTP request HTTP response HTTP request HTTP response POST O Client manda um request solicitando realizar um POST e envia no Body o registro que quer cadastrar, o Server deve estar preparado para receber esse POST, incluir o novo item solicitado e responde-lo com um response.
request.params usado para pesquisa de uma ou multiplas strings request.query usado para enviar dados que serão cadastrados no banco, podem ser combinados com o query ou o path params request.body Tanto o body quando o query e o path são parâmetros enviados na requisição e podem ser acessados pelo servidor afim de definir a requisição e as ações.
"/rota/:id" request.params.id bons, porem limitantes, por exemplo, se quisermos filtrar por uma string Path params são aqueles que são adicionados a chave e o valor desejados "/rota?id=1234" request.query.id a forma mais efetiva de fazer requests com strings ou diversos valores Query params
pela letra D ❌ D: Delete (apagar) - apagar um registro O Client manda um request solicitando realizar um DELETE e o Server deve estar preparado para receber esse DELETE e responde-lo com um response. Client Server DELETE por id HTTP request HTTP response HTTP request HTTP response
PUT substitui todo o objeto que você deseja modificar, já o PATCH modifica somente uma propriedade dentro do seu objeto. { Reprograma } @analu.io PUT "idade": 24 DADO "idade": 24 DADO INICIAL "nome": "ana", "idade": 18, "cor": "preta" DADO "nome": "ana", "idade": 24, "cor": "preta" PATCH "idade": 24
PATCH Muitas vezes ainda usamos o PUT pela performance que ele tem quando relacionado o banco de dados. Substituir um dado inteiro é mais rápido do que somente uma propriedade dele. Por exemplo, vamos simular a uma edição do campo idade no dado de id=4 { Reprograma } @analu.io id: 1 "nome": "ana", "idade": 18, "cor": "preta" procure id =4 id: 2 "nome": "ana", "idade": 18, "cor": "preta" id: 3 "nome": "ana", "idade": 18, "cor": "preta" id: 4 "nome": "ana", "idade": 18, "cor": "preta" id: 5 "nome": "ana", "idade": 18, "cor": "preta" id: 6 "nome": "ana", "idade": 18, "cor": "preta" id: 7 "nome": "ana", "idade": 18, "cor": "preta" id: 8 "nome": "ana", "idade": 18, "cor": "preta"
PATCH Por exemplo, vamos simular a uma edição do campo idade no dado de id=4. No banco de dados nosso programa tem que percorrer pela memória procurando pelo id que queremos. Ele procura somente pelo índice que indicamos. { Reprograma } @analu.io id: 1 "nome": "ana", "idade": 18, "cor": "preta" procure id =4 id: 2 "nome": "ana", "idade": 18, "cor": "preta" id: 3 "nome": "ana", "idade": 18, "cor": "preta" id: 4 "nome": "ana", "idade": 18, "cor": "preta" id: 5 "nome": "ana", "idade": 18, "cor": "preta" id: 6 "nome": "ana", "idade": 18, "cor": "preta" id: 7 "nome": "ana", "idade": 18, "cor": "preta" id: 8 "nome": "ana", "idade": 18, "cor": "preta"
PATCH Porém estivéssemos escolhido um método PATCH, a procura continuaria, agora dentro do dado. Quando encontrado a propriedade ai sim o dado seria modificado. Tudo isso seriam frações de segundos para um computador, mas se tivéssemos dezenas de milhares de dados sendo modificados o tempo todo, como uma rede social, por exemplo, isso poderia causar certa lentidão no banco de dados @analu.io procure id =4 id: 1 "nome": "ana", "idade": 24, "cor": "preta" idade
PATCH Porém estivéssemos escolhido um método PATCH, a procura continuaria, agora dentro do dado. Quando encontrado a propriedade ai sim o dado seria modificado. Tudo isso seriam frações de segundos para um computador, mas se tivéssemos dezenas de milhares de dados sendo modificados o tempo todo, como uma rede social, por exemplo, isso poderia causar certa lentidão no banco de dados @analu.io procure id =4 id: 1 "nome": "ana", "idade": 24, "cor": "preta" idade
arquivo só, o server.js Projeto atual acessando o JSON conectando com express criando as rotas criando as lógicas configurando a porta e iniciando o servidor criando as rotas criando as lógicas
tiver um projeto simples, mas... como a gente faz quando temos um projeto mais complexo? Projeto atual acessando o JSON conectando com express GET /rota logica configurando a porta e iniciando o servidor acessando o JSON acessando o JSON GET /rota logica POST/rota logica POST/rota logica GET /rota logica PATCH/rota logica DELETE/rota logica GET/rota logica acessando o JSON
Toda a lógica e funcionalidades em um único código base. Simples, mas difícil de escalar conforme cresce. Escalável: Arquitetura moderna separa responsabilidades, melhora a manutenibilidade e escalabilidade @analu.io MVC (Model-View-Controller): Separação entre dados (Model), interface (View), e lógica de controle (Controller). Amplamente usado para aplicações web. Arquitetura Hexagonal: Isola a lógica de negócio da infraestrutura externa (banco de dados, APIs, etc.). Foco em independência e fácil manutenção. Facilita a troca de componentes sem afetar o núcleo da aplicação. DDD (Domain-Driven Design): Enfatiza a modelagem da aplicação baseada nos domínios de negócio. Alta coesão de lógica de negócios e separação de responsabilidades
arquitetural onde uma aplicação é dividida em vários serviços menores, cada um responsável por uma funcionalidade específica. Esses serviços são independentes, podem ser desenvolvidos, testados e implantados separadamente. @analu.io Escalabilidade Independente: Cada microservice pode ser escalado conforme a necessidade, otimizando o uso de recursos. Flexibilidade Tecnológica: Cada serviço pode ser desenvolvido em diferentes linguagens e tecnologias. Manutenção e Deploy: Atualizações e correções são feitas em serviços individuais, sem impacto no sistema completo. Resiliência: A falha de um microservice não compromete toda a aplicação, mantendo outros serviços operacionais.
(servidores, armazenamento, bancos de dados, redes, software) pela internet, em vez de ter servidores físicos locais. @analu.io Elasticidade: A capacidade de aumentar ou diminuir automaticamente os recursos conforme a demanda, garantindo que sua API consiga lidar com picos de tráfego sem sobrecarregar a infraestrutura. Alta Disponibilidade: Serviços em cloud oferecem replicação de dados e redundância para garantir que a API esteja sempre disponível, mesmo em caso de falhas. Custo-Efetividade: Você paga apenas pelos recursos que realmente usa, o que otimiza o investimento, especialmente em sistemas escaláveis
HTTP response HTTP request HTTP response 100-199 informação sucesso redirecionamento erro do cliente erro de servidor 200-299 300-399 400-499 500-599 código tipo de resposta GET POST PUT PATCH DELETE ler criar substituir modificar excluir verbo ação