Olá pessoal. Estudar Spring Boot é uma tarefa árdua para quem está começando. Tenho algum conhecimento em Java e resolvi me aventurar no Spring Boot, porém vejo que me faltam vários conceitos. Até comprei algumas video-aulas mas o professor já parte que vários princípios anteriores já são compreendidos (o que não é meu caso…kkk). Bem, depois de toda a introdução, estou montando um “quebra-cabeças” do Spring e vejo pouca coisa sobre os tais “endpoints”. Alguém consegue me dar uma luz? Estou tentando entender o funcionamento deles (como o browser o chama, o que ele faz, de onde vêm as classes que ele chama, etc); Desenvolvimento Java Web é complicado no início e tem pouco material iniciante (tem mais é avançado mesmo). Obrigado pela atenção!
Está falando de Spring MVC?
Sim, pois java web é o ponto mais alto da evolução de um dev… Ele começa por java básico, passa por JSE e daí vai para JEE, onde fica java web.
Perdão, é Spring Boot.
Mas sobre Endpoints - o que são? onde e como vivem? do que se alimentam?
Lido! Se quiser continuar…
O que você entendeu?
Explica sobre a diferença entre Endpoint e API. Isso acho que ficou bem claro. Minhas dúvidas seriam mais voltadas ao uso em si: aqueles “caminhos” (/algum/alguma/) com a anotação JPA “@”.
Endpoint com anotação JPA? Onde você viu isso?
Caro Zig Stardust…
Respondi com pressa e nem me atentei ao que escrevi.
Veja, eu me refiro a tudo o que o java web engloba: todos os conceitos de OO, da linguagem, do ciclo de vida de uma aplicação web, toda a parte do JSE (exceto o que se refere à interface gráfica), com adição de JPA, JTA e etc.
Logo, sim, Java web é o ponto mais alto da evolução de um dev java.
Assim como ASP.NET ou ASP.VB é o mais alto de um dev C#.
Me corrija se eu estiver errado, mas o “@Post”, “@Path” são anotações JPA, certo? e o ("/caraleo/aquatro") é um endpoint. Não é isso?
Não, não.
JPA = Java Persistence API, nada a ver com JAX-RS que é a especificação na qual estas anotações se encontram.
Ele é uma parte do endpoint.
Mas, qual a dúvida? Até o momento, tudo o que você colocou pode ser explicado em um tutorial sobre spring mvc e/ou restful web services.
Não entendi bem a diferença entre esse JPA e JAX-RS (esse último eu nem conhecia…). Achei que as anotações eram todas JPA. Bem, agradeço as dicas. E se tiver um bom tutorial para indicar, agradeço.
JPA é a especificação java referente ao processo de persistência de dados (basicamente, interação com bancos de dados relacionais diversos).
JAX-RS é a especificação para web services REST (esses serviços que são dispostos nesses endpoints que precisam de um padrão específico e podem trafegar coisas como json, xml e etc).
Ambas fazem parte da especificação JEE - java enterprise edition - que é a parte do java voltada para desenvolvimento de soluções robustas e complexas (não que o JSE não permita) voltadas para o ambiente web, incluindo web services (além do JAX-RS para REST, temos o JAX-WS para SOAP), o JPA (persistência), o JTA (transações), JSF (MVC web) e vários outros.
Um bom tutorial para entender o JAX-RS é este
@darlan_machado, então vou te passar uma dúvida minha (não sei se vou saber explicar, mas vamos lá): o que faz o browser procurar em uma classe Java determinado “endpoint”? É o caminho colocado na barra de endereços? Por exemplo,
se eu digitar no browser : “www.seila.com/caraleo/aquatro”, o que vai acontecer se tu tiver esse endpoint com uma anotação, como:
@Post
@Path("/caraleo/aquatro")
@Permission({Position.ADMIN})
e ao mesmo tempo tiver um caminho (pasta) extamente igual a esse com arquivos no server? (Não sei se me fiz entender, de qualquer forma, obrigado).
Cara, ai é que entra a questão de estudar. O browser não faz nada senão enviar uma requisição ao servidor. O servidor, por sua vez, vai identificar qual é o path acessado, normalmente, esse path representa uma aplicação (um sistema). Este sistema possui um mecanismo que vai (ou não) utilizar os valores passados no path (a partir da parte da aplicação) e utilizar para definir qual serviço deve ser acessado (ou qual serviço está exposto naquele endpoint).
Exemplo: http://www.blablabla.com.br:8080/meu-blabla/consulta/1234
O endpoint acima se encontra no host: www.blablabla.com.br.
Ele está respondendo na porta 8080
A aplicação é: meu-blabla
O parâmetro /consulta define qual serviço (método da classe com a devida anotação) será acessado
E o valor /1234 é um parâmetro a ser consumido (ou não) pelo serviço que responde a chamada de consulta
É claro que o método está anotado como (algo assim)
@Path("/consulta/{codigo}") //Padrão do JAX-RS, se bem me lembro
Ou
@RequestMapping("/consulta/{codigo}") //Padrão seguido no Spring MVC
No caso do Spring Boot, quem faz a parte de processar o que está no endpoint (path) para determinar qual serviço rodar, é o mecanismo do Spring (que é o Spring MVC). Se fosse JEE, seria o JAX-WS (alguma implementação, como o Jackson, por exemplo).
Como esse mecanismo sabe o que fazer e quando fazer?
É para isso que vocẽ usa as anotações (@Path, @RequestMapping, etc). Elas dizem o que o mecanismo precisa saber para definir o que e quando acessar.
As anotações @POST, @PUT, @GET e o parâmetro method da anotação @RequestMapping têm o intuito de determinar quais são os verbos (métodos) que serão permitidos na requisição.
Se algum dia você já trabalho com servlets, precisa lembrar que lá você definia quais verbos (métodos HTTP) que iria aceitar, implementando os métodos doGet, doPost, doPut, doDelete e etc. Basicamente, é a mesma ideia.
O aspecto mais fundamental disso tudo é entender:
- Ciclo de vida de uma aplicação web
- Funcionamento dos verbos (métodos) HTTP
- O que é um parâmetro
- O que são os escopos de uma aplicação web: página, request, response, sessão e contexto
- Como usar os paths (endpoints) de um web service REST
- Retornos do HTTP: status (0, 1, 2, 3 e 4) e códigos (200, 404, 503, 401, 415, etc)
Esses conceitos são cross linguagem, ou seja, independem de qual linguagem você usa para implementar, eles serão os mesmos (com pequenas diferenças, obviamente).
A aplicação vai buscar o serviço (método) está anotado com o path específico. Não há validação para a estrutura de diretórios do file system em questão.
E se não houver nenhum método com esse padrão?
Retorna-se o erro 404 - page/resource not found
Entendeu?
Ah, sobre onde buscar conhecimento; alura, udemy, cursos presenciais, livros, etc.
São 9 anos de java e muitos ouvindo música boa. Confesso que só fui gostar mesmo de Bowie depois de ouvir e entender Space Oddity. Aí fui atrás do Zig stardust and the spiders from Mars…
Muito bom! Obrigado pela aula, meu velho!