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...
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 TH-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.
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.
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?
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
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!
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")))
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?
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.
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!
Ó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.
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.
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?
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?
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.
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!
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.
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á 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.
o william me salvando mesmo depois de eu sair do projeto kkkkkkk valeu mano é noiss
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?
Bom D+ só queria saber como consumir uma API externa e o vídeo faz isso e ainda ensina muito mais.
Cara tu é fera demais!! Valeu
Mais um vídeo top, parabéns!!! , eu gostaria de ver geração de arquivo csv
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.
Muito obrigado pelo vídeo!! Super esclarecedor e bem explicado.
Merece no 1000 professor!!!
excelente conteúdo!!!
Cabeludo você deu show de aula rapaz. Parabéns!
Valeu, William! Conteúdo nota 1.000! Parabéns e muito obrigado!
Vídeo 100%. Ajudou de mais.
Parabens, excelente vídeo, você tem algum vídeo sobre padrão Saga para micro services ?
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
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...
Show Willian exatamente o que estava procurando.
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 TH-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?
O conteúdo da Algaworks é muito bom! Parabéns pelo trabalho!
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.
Ó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
Aula top. Muito obrigado por compartilhar seu conhecimento.
Top demais. Muito bom, obrigado pelo vídeo!
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!
Nota 10. Show de aula
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!
Aula top! muito obrigado
Um vídeo mostrando as diferenças seria sensacional
Pode deixar que vou providenciar, já está anotado!
Excelente conteúdo e ótima didática. Parabéns!
Valeu Willian!! obrigado por compartilhar o conhecimento. Muito bom o vídeo. Parabéns!!
Poxa, muito obrigado mesmo Antonio! :D
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 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?!
Faz de como se comunicar em cima do protocolo https...por favor.
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
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
Que video sensacional! Ótima explicação. Estou precisando implementar algo parecido no meu trabalho e foi de extrema ajuda
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")))
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?
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!
Ótimo vídeo, me ajudou muito, poderia me dar uma dica? como funciona os relacionamentos ManyToOne e OneToMany com o webclient? Valeu!
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!
Ó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.
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.
Muito bom !!!
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.
Problemas com block()? Deixa o seu pom.xml compatível com a do repositório do projeto 'consume'
Uma dúvida, eu conseguiria ter diferentes retornos de objetos, com status code diferentes?
muito bom!
Muito bom, obrigado!!!!
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 ?
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?
Paz! Qui tal. Esse conteudo esta actualizado para 2022?
Olá Estevao, você teve alguma dificuldade específica?
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?
E se não for um projeto "spring boot"? E se for um projeto com spring 3... por exemplo ?
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?
E-X-C-E-L-E-N-T-E-!!!
Usei webclient para uma aplicação com 600TPS, e usando o block a aplicação está travando =( você tem alguma dica ?
Show de bola
Valeu mesmo, Marcos!
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!
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.
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;
}
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á.
Como seria a implementação caso o retorno fosse uma lista de produtos?
Faz aí a diferença
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.
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 ?
Melhor WebClient ou Webflux ?