Loading repository data…
Loading repository data…
aevilesaguiar / repository
Finalizado primeira parte do delivery API
Sistema de Delivery de Comida, tipo Ifood/Uber Eats, Será um MVP(Produto minimo Viavel) de sistema de comidas;
Maven
Spring Data JPA (biblioteca que vai ajudar a criar repositorio para usa o jakarta persistence)
POSTMAN (para testar uma restApi, as requisições)
Mysql Server
Flyway (ferramenta para gerenciamento de schema de banco de dados, para manutenção das colunas, tabelas relacionamentos e etc)
Spring Boot DevTools (restarta a aplicação automaticamente)
Aplicattion Programming Interface(Interface de programação de aplicação). É um componente de Software que possui um conjunto de funções que faz a intermediação de acesso a funcionalidades de algum sistema.
Para que possa existir uma API é necessário existir dois papeis.
SOFTWARE CONSUMIDOR <-> API <-> SOFTWARE PROVEDOR.

O software consumidor conversa com o software provedor através de uma API.
Web Services são um tipo de API que fornece a sua interface de comunicação pela web.Quando flamos em WebServices estamos falando de webApi. Uma API não necessariamente precisa servir ao publico externo apenas, mas também ao publico interno.
Todos webservices são APIS, mas nem toda API é webService.
Existem diversas APIS expostas no mundo, dificilmente uma aplicação moderna não consome uma API.

Exemplo de uma API do Ifood
SOFTWARE RESTAURANTE <-> API DO IFOOD <-> IFOOD
GRAÇAS A API OS RESTAURANTES PODEM AUTOMATIZAR OS SEUS PEDIDOS
Outro Exemplo - Consumindo webServoices de um provedor:
O agendador de POSts seria um software utilitário para consumir uma API nesse caso o Linkedin

Consumindo Web Services de vários provedores:

Posso ter uma aplicação, onde o cliente chega a uma agencia de viagem, onde o meu software consulta as Apis para verificar quais pacotes são mais baratos. Uma única aplicação consulta várias APIS e verifica a melhor opção. Lembrando que as Apis utilizada por sua aplicação pode estar consultando outras APIS.
APIS consumidas por suas User Interfaces e outros sistemas

API consultando outras APIS, um exemplo um aplicativo mobile que consulta a sua própria API, a sua API consulta a melhor opção para o cliente, podemos ter sites, sistemas internos consumindo a sua API. E podmos também expor a minha API para empresas externas, através de comissão e oytros.
Spring Rest não existe, é apenas um termo para se dizer que temos uma REST API desenvolvida com Spring.
Um ecossistema de projeto, ajuda a desenvolver aplicações com simplicidade e flexibilidade. O foco do Spring é foco na regra do negócio.Reduzir complexidade do Negócio. Possui maturidade e modularidade. O Spring está em evolução constante. Spring é openSource e tem uma comunidade forte além de ser muito popular.
Quando falamos em Spring Framework, estamos falando de um projeto que serve como base para todos os outros.
Features -Spring MVC: usado para Web -Core tecnologies: base do spring pois está a injeção de dependencia para o Objeto funcionar;
Spring Data é um projeto guarda-chuva que agrupa vários outros projetos relacionados a acesso a dados.
Codigo boilerPlate: codigo que precisa escrever várias vezes sendo repetitivos;
Spring Boot: é um projeto que ajuda a criar projetos que se alto configuram, seguindo convenções, não é necessário se preocupar com a maioria das configurações, eles podem configurar não só os projetos do seu ecossitema, mas também de bibliotecas terceiras. Spring Boot não gera código, não substitui Spring MVC,Data e outros , ele apenas complementa os outros projetos;
O spring boot incorpora um servlet container, por padrão é o tomcat dentro do jar da aplicação. Dentro do jar ele já tem um container com o tomcat embutido, ou seja ele já sobe a aplicação
O spring boot apenas ajuda a criar o projeto, não gera código, quando criamos um projeto inicial no springInitializer ela cria uma classe main.
Pensando um pouco no maven que um gerenciador de dependencias, para reduzir a quantidade de linhas de código, utilizamos os startes, que são dependencias que agrupam outras dependencias. um exemplo se quisermos trabalhar com jpa podemos incluir o start nas dependencias do POM.

Spring boot não é um framework só para desenvolvimento WEB, mas você pode usar Spring boot para aplicações que rodam fora da web. Spring boot é uma camada de abstração em cima do spring, é uma camada que simplifica ainda mais o desenvolvimento das nossas aplicações, inclusive spring MVC.
Spring MVC é um projeto do ecossistema Spring para desenvolver controladores web que recebem requisições HTTP, e develvem uma resposta, podem ser ResrApi ou devolver html ou qualquer outro tipo de arquivo.
O Spring MVC foi adicionado no projeto através do start "web" que incluimos na geração do projeto nas dependencias do maven.
Jakarta EE administrado pelo o Eclipse Foundation. A plataforma java EE foi batizada de Jakarta EE. Java EE é baseada em especificações. Um exemplo o JPA é uma especificação que está dentro do jakarta EE, o JEE é uma especificção guarda chuva que tem várias sub especificações, JPA está dentro do JEE, JPA foi a padronização de algo que já existia, o Hibernate. Hibernate após a padronização passou a implemetar a especificação, então o hibernate passou a se tornar o produto a implementação da especificação JPA.
Muitos confundem a diferença entre o Hibernate e o JPA. O Hibernate é de fato o framework ORM, ou seja, a implementação física do que você usará para persistir, remover, atualizar ou buscar dados no SGBD. Por outro lado, o JPA é uma camada que descreve uma interface comum para frameworks ORM.
Hoje o hibernate tem outros concorrentes, se hoje falarmos que estamos usando o JPA não necessariamente estamos o hibernate.
O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java, mas também é disponível em .Net com o nome NHibernate.
Com JPA, se houver a necessidade de alterar o sistema de banco de dados, basta trocar o dialeto que um novo e compatível SQL é gerado em tempo de execução. Interessante notar também que o uso do JPA permite que a implementação da especificação seja alterada sem impactos no fonte da aplicação.
O Java EE (Java Enterprise Edition) consiste de uma série de especificações bem detalhadas, dando uma receita de como deve ser implementado um software que faz cada um desses serviços de infraestrutura.
Maven é uma ferramenta de gerenciamento de dependencias e automação de build de projetos java. Não necessariamente precisa ser com spring.
A estrutura de pastas é padronizada pelo o Maven.
Na raiz do projeto temos os arquivo pom.xml. É onde ficam as configurações de maven no projeto.
pom-> object project model
o arquivo HELP.md é apenas um arquivo que podemos incluir alguma observação do projeto, mas não influencia em nada.
mvnw.cmd e mvnw -> maven wrapper, ele possilita que executemos um maven no terminal, mesmo que não tenha um maven instalado você não precisa instalar no Sistema operacional. Ou seja ele baixa automaticamente da internet.
Várias IDES já possuem um maven embutido dentro dele.
O maven ajuda a fazer o build do projeto, mas como fazer esse build? Eu posso clicar em cima do projeto -> Run as -> Maven build, que eu rodo o build do maven. Vai aparecer as configurações.
O package significa que eu quero empacotar, no console roda o maven e ele gera o pacote, gera o jar dentro da pasta target dentro do projeto, dentro dele existem várias pastas , o mais importante é o jar.
No terminal eu posso fazer dessa forma também usando o comando:
**escrevi o comando mvn clean package, posso ** ele limpa e gera o jar do nosso projeto. Ou seja ele gera o Build.
Esse arquivo jar é o nosso projeto empacotado, eu posso encaminhar ele por email para que alguém pudesse utilizar o projeto.
**mvn clean - limpa os arquivos anteriores do build
Class loader ela é responsável por ler a estrutura das classes do nosso projeto e ficar na memória Ele cria duas class loader, um chamado de base e outro de restart. Tudo que não muda, por exemplo as bibliotecas ele adiciona no class loader de base, e o que desenvolvemos ele inclui no class loader restart. Toda vez que alteramos o que desenvolvemos ele reinicia o class loader de restart, e isso torna muito mais rápido o desenvolvimento.
Injeção de dependência é um padrão de desenvolvimento de programas de computadores utilizado quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema.
Injeção de Dependência é um é um padrão de projeto usado para evitar o alto nível de acoplamento de código.
É a implementação de injeção de dependências do Framework. É algo bem comum em Frameworks que implementam inversão de controler/inversão no spring nós temos o Spring Context, ele é reponsável pela injeção de dependencias, como instanciar, de configurar injetar Objetos em outros objetos.
No Spring quando rodamos uma aplicação o IOC Container, ele é inicializado e começa a instancializar os Beans que ele deve gerenciar. Bean(Dependence/dependencia) é nome dado a objetos gerenciados pelo o container do Spring. O Bean é instanciado, ele é configurado e pode ser injetado em outros Beans que são gerenciados pelo o Container do spring.

O Container de inversão de Controler do Spring é representado pela interface Aplication Context.
Pontos de injeção é onde podemos fazer a injeção de objetos dentro dos nossos Beans.