Excelente. Para complementar, acho que poderiam fazer um video explicando como usar o WebClient com uma API que espera autenticação, ou será que já existe?
Sim! Vamos comparar os 2 recursos RESTtemplate x WebClient!!! Grande @William, muito obrigado, belo video. #SpringWebClient me parece que ficou bem bom.
Muito show a explicação, só senti falta do get com bodyToFlux, que é usado quando o retorno é uma lista de objetos, nesse caso, o block é meio diferente né, ainda não entendi como usar o o blockFirst ou blockLast...
Parabéns pelo conteúdo do vídeo. Confesso que pensei que ia funcionar a requisição em paralelo quando colocou a chamada aos dois métodos block juntas e ao final do método. Se tivesse funcionado, para mim estaria fazendo sentido. Estranhei a sintaxy com o zip.
Gostaria de sugerir a publicação de um vídeo sobre o consumo de web services SOAP usando o Spring Boot. Após uma pesquisa no UA-cam, não encontrei vídeos nacionais de qualidade que pudessem orientar bem sobre o consumo de web services SOAP usando o Spring Boot. Por isso, acho que seria interessante a Algaworks publicar um vídeo sobre este tema. Entendo que o foco hoje em dia é o consumo e produção de serviços que utilizam a arquitetura REST. No entanto, ainda existem muitos sistemas legados que expõem web services SOAP. Seria interessante para os dois lados. Os alunos que iriam expandir os conhecimentos sobre o assunto e a Algaworks que seria o único canal a publicar um vídeo de qualidade sobre o tema em questão. Sou aluno de vocês em vários cursos, como o Especialista Spring Rest, Spring Framework Expert e Especialista JPA. Gosto muito dos vídeos produzidos pela Algaworks, porque vocês realmente possuem didática e produzem conteúdo com qualidade. Muito obrigado.
Excelente aula, sua didatica e muito boa, as aulas de docker sao tops. voce poderida fazer uma sequencia de aulas falando sobre microservice parabens pelo sucesso
Excelente aula. Como mencionaste no inicio do vídeo, seria interessante um vídeo abordando as diferenças entre Spring mvc e Spring boot. Com sua didática isso ficaria brilhante. Abraço, fique bem.
Parabéns pela video aula show! Estava pesando nessa demonstração consumindo a api externa igual foi feito no exemplo mas salvar no banco de dados como ficaria?
Olá Rubens! Muito obrigado! No cenário síncrono, onde a chamada é bloqueante, você poderia simplesmente utilizar um try/catch, já em um modo assíncrono, tem outras formas de se fazer esse tratamento. Estou pensando em fazer um vídeo sobre isso, o que você acha?
Olá! parabéns!!! Achei o vídeo super excelente! Porém gostaria de ter visto as demais operações também sendo implementadas. Fica como sugestão para um próximo exemplo, a implementação das demais operações e uma discussão referente a esta arquitetura de Webclient em relação a arquitetura tradicional de implementação de Microsserviços.
Olá Anderson! Valeu mesmo! Quando você se refere as demais operações, está falando dos verbos HTTP? Por exemplo, POST, PUT, DELETE, etc.? Já está anotado como sugestão, muito obrigado!
Excelente Conteudo , muito bem explicado. tentei fazer um teste para receber uma lista e não conseguir ate o momento deste comentario, como seria no caso, para ter um retorno de uma Lista de Objetos no Mono ? Obrigado.
Ótimo vídeo, valeu mesmo. Estava testando uma uri e deu erro de redirecionamento, código 301, como tratar isso? No postman essa mesma uri funciona normalmente.
Parabéns, muito bom, agora estou com uma duvida, caso eu em um método post, eu não queira obter o response, somente enviar a requisição, teria como eu verificar caso ocorresse algum error ?
Olá mergulhador! Caso o seu código for sincrono como mostrado na aula, você pode utilizar o "onStatus" após o retrieve() e lançar uma Exception. .onStatus(httpStatus -> httpStatus.value() == 500, error -> Mono.error(new RuntimeException("error")))
Em relação às portas, é um tanto quanto incômodo criar vários Beans que só mudam a porta. Ao meu ver, uma solução melhor seria criar um gateway como o Zuul do Sprinig Cloud para rotear de forma automática. Aliás, parabéns pelo vídeo, agregou muito conhecimento!
Achei bem interessante o assunto, parabéns pelo conteúdo!! Espero que tenham mais com assunto relacionado. Uma pergunta, caso eu quisesse exibir o resultado não apenas em JSON, mas também em um outro formato como XML ou CSV, como ficaria o header, eu simplesmente adicionar um outro header ou teria que criar um outro @bean?
Muito bom o conteúdo, só fiquei com uma dúvida... Vi que só está sendo retornado um objeto pela classe Mono, mas e se eu quiser retornar uma lista por exemplo?
O Mono pode conter uma lista dentro dele, mas caso queria utilizar tudo reativo, você pode utilizar o Flux. Acontece que o Flux só será útil caso a API que você consome também for reativa.
Pra quem está com erro no block(), use a versão 11 pra cima do java, apanhei um fds pq estava na versão 8, ainda bem que li o comentário do @Emanuel Paiva Medeiros
Olá ótimo video, tentei implementar mas com uma API que não é bloqueante e retorna o erro "block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-epoll-3" para estes casos o que poderia fazer para recuperar o objeto?
Willian , sou dev java e tenho conhecimento em Java server faces (jsf) porém vejo muitos falarem de spring mvc, o q o mercado hj em dia mais pede dentro os 2? Jsf já tá depreciado? Há muita diferença?
Olá Kobane! O Spring vem realmente obtendo uma grande notoriedade, porém o JSF ainda está sendo usado e ainda faz parte da especificação Jakarta EE. É possível que mais cedo ou mais tarde ele será depreciado, mas como ainda há empresas que pedem essa skill no mercado, não é algo que você precise ou deva deixar de lado. A melhor opção nesse caso que vejo, é ampliar o seu leque de opções, então saber JSF e saber Spring MVC só tem a agregar em seu currículo.
Vídeo excelente! Isso pode ser uma ideia de micro serviço?, mas por favor amigos me nome de Jesus, façam um vídeo consumindo uma api no nível de maturidade 3 pelo Front Angular.
Olá Vinicius! Com certeza, você vai utilizar bastante esse recurso em uma arquitetura de microsserviços. Esse exemplo mesmo já é uma ideia bem simples dentro desse conceito. Com relação a sua sugestão de vídeo, pode ter certeza que vou providenciar, já está anotado aqui!
Ao utilizar o .block() obtenho o seguinte erro: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3 Alguma ideia?
Esse metodo ainda e viavel nos dias de hj? quero aplicar em projetos e queria saber para aplicar em um projeto empresarial, e queria saber se e viavel.
Olá mergulhador! O Webclient ainda é atual e está sendo atualizado até os dias de hoje. O client http do Spring que não está mais recebendo atualizações é o RestTemplate.
Olá Lucas, não é necessário configurar o Bean do WebClient na classe Main. Você pode criar uma classe como WebClientConfig, anotá-la com @Configuration e colocar o Bean lá.
Olá Gustavo! No caso da chamada síncrona, ou seja, no modo bloqueante, ai sim, um try/catch resolveria o problema, já no modo assíncrono teríamos algumas formas de tratar esses erros. Estou pensando em gravar um vídeo a respeito, o que você acha?
Olá Gisiona! Sim, a implementação do WebClient é muito mais rica e completa que a do RestTemplate. Até por isso a própria documentação do Spring recomenda o uso do mesmo. O RestTemplate está em "modo de manutenção", ou seja, ele continua sendo levado para versões mais recentes do Spring, mas apenas com pequenas alterações e correções de bugs, logo o mesmo será depreciado.
Parabéns! Muito bem explicado.
Excelente. Para complementar, acho que poderiam fazer um video explicando como usar o WebClient com uma API que espera autenticação, ou será que já existe?
Valeu, William! Conteúdo nota 1.000! Parabéns e muito obrigado!
Parabéns, esses vídeos estão muito bons 🎉 sugestão, falem sobre Flux!
Opa, obrigado de verdade Estevão! Pode deixar, que já está anotado sua sugestão!
Sim! Vamos comparar os 2 recursos RESTtemplate x WebClient!!!
Grande @William, muito obrigado, belo video. #SpringWebClient me parece que ficou bem bom.
Cabeludo você deu show de aula rapaz. Parabéns!
Cara tu é fera demais!! Valeu
Merece no 1000 professor!!!
Parabéns, ótimo vídeo! Gostaria muito de ver um vídeo sobre consumo de web service SOAP.
aula fantástica. poderia ter um vídeo desses falando sobre o spring reativo Mono e Flux sendo utilizados nos controllers e services
Parabens, excelente vídeo, você tem algum vídeo sobre padrão Saga para micro services ?
Aula top. Muito obrigado por compartilhar seu conhecimento.
Mais um vídeo top, parabéns!!! , eu gostaria de ver geração de arquivo csv
Ótimo conteúdo com didática excelente! Por mais vídeos assim. Obrigado!!
Poxa, muito obrigado Wallace! Fico feliz que tenha gostado.
Vamos sempre nos esforçar para entregar bons conteúdos pra vocês :D
Bom D+ só queria saber como consumir uma API externa e o vídeo faz isso e ainda ensina muito mais.
Muito obrigado pelo vídeo!! Super esclarecedor e bem explicado.
Muito show a explicação, só senti falta do get com bodyToFlux, que é usado quando o retorno é uma lista de objetos, nesse caso, o block é meio diferente né, ainda não entendi como usar o o blockFirst ou blockLast...
O conteúdo da Algaworks é muito bom! Parabéns pelo trabalho!
o william me salvando mesmo depois de eu sair do projeto kkkkkkk valeu mano é noiss
Show Willian exatamente o que estava procurando.
Excelente conteúdo e ótima didática. Parabéns!
excelente conteúdo!!!
Top demais. Muito bom, obrigado pelo vídeo!
Valeu Willian!! obrigado por compartilhar o conhecimento. Muito bom o vídeo. Parabéns!!
Poxa, muito obrigado mesmo Antonio! :D
Caraba muito bom... FAÇA O VIDEO DAS DIFERENÇAS SIM... ajudaria muito
Opa, que bom que gostou Jefferson!
Beleza, vou fazer esse vídeo!
Nota 10. Show de aula
Parabéns pelo conteúdo do vídeo.
Confesso que pensei que ia funcionar a requisição em paralelo quando colocou a chamada aos dois métodos block juntas e ao final do método.
Se tivesse funcionado, para mim estaria fazendo sentido.
Estranhei a sintaxy com o zip.
Aula top! muito obrigado
Gostaria de sugerir a publicação de um vídeo sobre o consumo de web services SOAP usando o Spring Boot. Após uma pesquisa no UA-cam, não encontrei vídeos nacionais de qualidade que pudessem orientar bem sobre o consumo de web services SOAP usando o Spring Boot. Por isso, acho que seria interessante a Algaworks publicar um vídeo sobre este tema. Entendo que o foco hoje em dia é o consumo e produção de serviços que utilizam a arquitetura REST. No entanto, ainda existem muitos sistemas legados que expõem web services SOAP. Seria interessante para os dois lados. Os alunos que iriam expandir os conhecimentos sobre o assunto e a Algaworks que seria o único canal a publicar um vídeo de qualidade sobre o tema em questão.
Sou aluno de vocês em vários cursos, como o Especialista Spring Rest, Spring Framework Expert e Especialista JPA. Gosto muito dos vídeos produzidos pela Algaworks, porque vocês realmente possuem didática e produzem conteúdo com qualidade. Muito obrigado.
soap num é meio muito ruim?
Vídeo 100%. Ajudou de mais.
Excelente aula, sua didatica e muito boa, as aulas de docker sao tops.
voce poderida fazer uma sequencia de aulas falando sobre microservice
parabens pelo sucesso
Conteúdo muito valioso
Poxa, muito obrigado Domingos. Ficamos muito felizes em saber que tenha gostado. :D
Que video sensacional! Ótima explicação. Estou precisando implementar algo parecido no meu trabalho e foi de extrema ajuda
Faz de como se comunicar em cima do protocolo https...por favor.
Um vídeo mostrando as diferenças seria sensacional
Pode deixar que vou providenciar, já está anotado!
opa... tudo contéudo muito bom... seria possivel tratar sobre a programação reativa e o projeto reactor?
Olá mergulhador!
Já está na nossa lista de estudos, continue nos sugerindo novos assuntos!
Muito bom !!!
Excelente aula. Como mencionaste no inicio do vídeo, seria interessante um vídeo abordando as diferenças entre Spring mvc e Spring boot. Com sua didática isso ficaria brilhante. Abraço, fique bem.
Olá Vilson!
Poxa, que massa, fico muito feliz que tenha gostado. Pode deixar então que vou preparar esse vídeo sobre as diferenças!
Parabéns pela video aula show! Estava pesando nessa demonstração consumindo a api externa igual foi feito no exemplo mas salvar no banco de dados como ficaria?
Muito bom o video, gostaria de saber, no cenario onde um dos end-points falha, como o Mono faz o tratamento, ou e apenas lancada uma exception.
Olá Rubens! Muito obrigado!
No cenário síncrono, onde a chamada é bloqueante, você poderia simplesmente utilizar um try/catch, já em um modo assíncrono, tem outras formas de se fazer esse tratamento.
Estou pensando em fazer um vídeo sobre isso, o que você acha?
@@algaworks Adoraria ver esse video =)
@@algaworks Seria muito bom =D
@@algaworks Esse vídeo seria muito legal em?!
Ótimo vídeo, me ajudou muito, poderia me dar uma dica? como funciona os relacionamentos ManyToOne e OneToMany com o webclient? Valeu!
Olá! parabéns!!! Achei o vídeo super excelente! Porém gostaria de ter visto as demais operações também sendo implementadas. Fica como sugestão para um próximo exemplo, a implementação das demais operações e uma discussão referente a esta arquitetura de Webclient em relação a arquitetura tradicional de implementação de Microsserviços.
Olá Anderson! Valeu mesmo!
Quando você se refere as demais operações, está falando dos verbos HTTP? Por exemplo, POST, PUT, DELETE, etc.?
Já está anotado como sugestão, muito obrigado!
@@algaworks Opa. Obrigado, me refiro aos demais verbos HTTP sim. Parabéns!!! Att
Muito bom, obrigado!!!!
Eu consigo usar esse mesma ideia para consumir uma api SOAP? Se puder fazer um video consumindo uma api SOAP com springboot seria bacana.
muito bom!
Problemas com block()? Deixa o seu pom.xml compatível com a do repositório do projeto 'consume'
Excelente Conteudo , muito bem explicado. tentei fazer um teste para receber uma lista e não conseguir ate o momento deste comentario, como seria no caso, para ter um retorno de uma Lista de Objetos no Mono ? Obrigado.
Ótimo vídeo, valeu mesmo.
Estava testando uma uri e deu erro de redirecionamento, código 301, como tratar isso? No postman essa mesma uri funciona normalmente.
Parabéns, muito bom, agora estou com uma duvida, caso eu em um método post, eu não queira obter o response, somente enviar a requisição, teria como eu verificar caso ocorresse algum error ?
Olá mergulhador!
Caso o seu código for sincrono como mostrado na aula, você pode utilizar o "onStatus" após o retrieve() e lançar uma Exception.
.onStatus(httpStatus -> httpStatus.value() == 500, error -> Mono.error(new RuntimeException("error")))
Em relação às portas, é um tanto quanto incômodo criar vários Beans que só mudam a porta. Ao meu ver, uma solução melhor seria criar um gateway como o Zuul do Sprinig Cloud para rotear de forma automática. Aliás, parabéns pelo vídeo, agregou muito conhecimento!
E-X-C-E-L-E-N-T-E-!!!
Achei bem interessante o assunto, parabéns pelo conteúdo!! Espero que tenham mais com assunto relacionado.
Uma pergunta, caso eu quisesse exibir o resultado não apenas em JSON, mas também em um outro formato como XML ou CSV, como ficaria o header, eu simplesmente adicionar um outro header ou teria que criar um outro @bean?
Muito bom o conteúdo, só fiquei com uma dúvida... Vi que só está sendo retornado um objeto pela classe Mono, mas e se eu quiser retornar uma lista por exemplo?
O Mono pode conter uma lista dentro dele, mas caso queria utilizar tudo reativo, você pode utilizar o Flux. Acontece que o Flux só será útil caso a API que você consome também for reativa.
Show de bola
Valeu mesmo, Marcos!
Pra quem está com erro no block(), use a versão 11 pra cima do java, apanhei um fds pq estava na versão 8, ainda bem que li o comentário do @Emanuel Paiva Medeiros
Opa blz! como eu faria para retornar uma lista de produtos ?
o Mono traz um produto e para trazer uma Lista ?
Uma dúvida, eu conseguiria ter diferentes retornos de objetos, com status code diferentes?
Olá ótimo video, tentei implementar mas com uma API que não é bloqueante e retorna o erro "block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-epoll-3"
para estes casos o que poderia fazer para recuperar o objeto?
E se não for um projeto "spring boot"? E se for um projeto com spring 3... por exemplo ?
Como seria a implementação caso o retorno fosse uma lista de produtos?
Willian , sou dev java e tenho conhecimento em Java server faces (jsf) porém vejo muitos falarem de spring mvc, o q o mercado hj em dia mais pede dentro os 2? Jsf já tá depreciado? Há muita diferença?
Olá Kobane!
O Spring vem realmente obtendo uma grande notoriedade, porém o JSF ainda está sendo usado e ainda faz parte da especificação Jakarta EE.
É possível que mais cedo ou mais tarde ele será depreciado, mas como ainda há empresas que pedem essa skill no mercado, não é algo que você precise ou deva deixar de lado. A melhor opção nesse caso que vejo, é ampliar o seu leque de opções, então saber JSF e saber Spring MVC só tem a agregar em seu currículo.
Paz! Qui tal. Esse conteudo esta actualizado para 2022?
Olá Estevao, você teve alguma dificuldade específica?
Usei webclient para uma aplicação com 600TPS, e usando o block a aplicação está travando =( você tem alguma dica ?
Vídeo excelente! Isso pode ser uma ideia de micro serviço?, mas por favor amigos me nome de Jesus, façam um vídeo consumindo uma api no nível de maturidade 3 pelo Front Angular.
Olá Vinicius!
Com certeza, você vai utilizar bastante esse recurso em uma arquitetura de microsserviços. Esse exemplo mesmo já é uma ideia bem simples dentro desse conceito.
Com relação a sua sugestão de vídeo, pode ter certeza que vou providenciar, já está anotado aqui!
Ao utilizar o .block() obtenho o seguinte erro: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3
Alguma ideia?
Olá Anibal! Como ficou sua implementação?
@@algaworks public DadosIbge getDadosIbge(Long numero) {
Mono monoDadosIbge = this.webClient.method(HttpMethod.GET)
.uri("/{numero}", numero)
.retrieve().bodyToMono(DadosIbge.class);
DadosIbge dadosIbge = monoDadosIbge.block();
return dadosIbge;
}
Esse metodo ainda e viavel nos dias de hj? quero aplicar em projetos e queria saber para aplicar em um projeto empresarial, e queria saber se e viavel.
Olá mergulhador! O Webclient ainda é atual e está sendo atualizado até os dias de hoje. O client http do Spring que não está mais recebendo atualizações é o RestTemplate.
@@algaworks Haaaa duvida, em meus teste que vi em outros videos usam o build inves do create, qual a diferença?
Alguem sabe se esse metodo é usado recentemente ? Qual seria o metodo mais conveniente ? E é realmente necessario mexer no main aplication ?
Olá Lucas, não é necessário configurar o Bean do WebClient na classe Main. Você pode criar uma classe como WebClientConfig, anotá-la com @Configuration e colocar o Bean lá.
Faz aí a diferença
Boa tarde!
Sou especialista Java, já havia implementado o WebClient, porém testa-lo está bem complexo.
vc tbm colocou esse webClient no arquivo executável ?
Se der erro trata com o try catch?
Olá Gustavo!
No caso da chamada síncrona, ou seja, no modo bloqueante, ai sim, um try/catch resolveria o problema, já no modo assíncrono teríamos algumas formas de tratar esses erros.
Estou pensando em gravar um vídeo a respeito, o que você acha?
@@algaworks Acho top. Principalmente por conta da opção assíncrona.
@@algaworks Com certeza um vídeo com essa abordagem é bem-vindo :)
O uso de WebClient é melhor que a implementação do RestTemplate ?
Olá Gisiona!
Sim, a implementação do WebClient é muito mais rica e completa que a do RestTemplate. Até por isso a própria documentação do Spring recomenda o uso do mesmo.
O RestTemplate está em "modo de manutenção", ou seja, ele continua sendo levado para versões mais recentes do Spring, mas apenas com pequenas alterações e correções de bugs, logo o mesmo será depreciado.
Melhor WebClient ou Webflux ?