As a total newcomer to Java (been a typescript / javascript backend dev for years, I started learning Java this weekend for a new job) this is great and I have a functioning graqhql server thanks to this video. I'm really surprised that tool this easy for graphql is only 2 weeks old in 2021. It'd be great to see this series develop as I'm sure there are plenty of devs like me who are used to Apollo and have a solid understanding of graphql but have to learn the new syntax of spring-graphql. I'm sure you've implemented gql interfaces and I haven't got to that part of the docs yet! For anyone struggling to get to the working server stage I suggest checking the dependencies again, I missed / got confused when we went back to add the in memory SQL.
Great presentation! I had a question - how are errors handled in SpringBoot graphql? In REST for instance, I could return a 404 if I don't find a record corresponding to a query but in graphql at least from what I see in the graphiql UI I get an INTERNAL_ERROR as the error classification and don't see an error code. Is there a way to return HTTP error codes?
Btw these 'fetchers' of related data can quickly lead to N+1 problems. Calling N time in parallel using reactive will just reduce the latency, but the payload to the data source containing related data will be huuuuuugeeeeee... Sounds too familiar issue...
100% - the N+1 problem is a very real problem. Ideally, you wouldn't have your service architecture setup to require that, but it sometimes happens, and at least reactive programming and Spring GraphQL make it as concise and easy to implement as possible.
Can the order service be in its own spring boot application? How would spring stitches the customer and order service schema together, Is there a gateway involved that knows where the customer service and order service is located ?
Hello, I'm new to spring boot and graphql so my question might be dump but I didn't see any answer on internet so i'm asking it here. What's the difference between the graphql resolvers and the sring boot Controller ? Most of the tutorials I see on google and youtube are using these specific ways (some are also using services but it seems less popular) of mapping a query to an execution that will retrieve data from a repository. I can't find are the differences, do they have the same purpose or maybe I am misunderdanting something ? What is the best way to make that schema mapping between query and execution ? I would be glad to have your thoughts about this, if my question isn't clear, tell me how i can explain it better. Thanks for your help
I followed along with the (very good) video and made all the code work locally (except for the web socket example). But I'm not able to make it work for a project of my own devising. I've created a non-reactive repository to interact with Mongo DB, created model classes to map the JSON documents into, added a web MVC controller to serve up the data. I'm able to see data coming back if I use a Swagger UI to communicate with a REST controller. But when I connect the /graphiql UI to my web MVC controller I get an "Error Fetching Schema" message in the Docs section. Setting logging to DEBUG didn't turn up any new information. I tried setting breakpoints but only fell into a hole. What's the best way to get information out to debug schema issues? All the other tutorials are not using the annotations that Josh does.
@SpringDeveloper (and also JoshLong) Would be possible to have a GraphQL code-first approach video? Instead of schema first? I see that you are writing a graphql schema with types like Customer, Order, and then you have to duplicate thatin java code for the records for Customer Order, CustomerEvent, Duplication of CustomerEvent type enum in both sides. What the spring boot application uses for the reactivecCrudRepositories, Subscribers, Flux, Mono is the Java code, not the schema. One can write something in the schema but what counts is what is on the classes, those classes are used in the medium and lower levels of abstraction. One can have a schema but that might differ from the classes unintentionally, there could be typos the could be other mistakes. The schema is only used for the datafetchers for the annotations, only for communication not for what the business logic does. There is no guarantee that things will match. While for some cases a Schema-first approach is good for innersource or internal services a code-first approach can fit better. You experienced the issue of doing Schema first on the customerId naming issue towards the end of the video, even a small codebase like this example from an experieced developer had such issue with mismatch 2 times. With a code-first approach you would only have had to debug the java code and the javascript, no need to make JavaSchemajavascript debugging :) Josh how about having, another spring tips video or a Bootiful podcast with the awesome Dariusz Kuc? He has a talk about "Bootiful GraphQL with Kotlin" ua-cam.com/users/results?search_query=graphql+dariusz+kuc Thanks
Good tutorial, I have requirement like I have to write some data which comes in request (example like customer details)and return txt or pdf file how to do that in my local machine Please help me on this
How do i connect the customer events handler method to the points where the events acutally spawn? Do i implement something like a hot-stream service, that creates the "never ending" Flux and connect that to the handler method, so that other services can put things into that flux? Or what is the recommended approach?
I think 99% of real world projects will just have data stored in sql DB as relations. Last time I checked, r2dbc was unable to handle that. Did anything change?
This guy explains without drag, Very Cool!
Thumbs up for the JS jokes. Josh never disappoints.
So far pretty straightforward and always simple! Let's hope Spring Security, Testing, and other components will follow the same path!
As a total newcomer to Java (been a typescript / javascript backend dev for years, I started learning Java this weekend for a new job) this is great and I have a functioning graqhql server thanks to this video.
I'm really surprised that tool this easy for graphql is only 2 weeks old in 2021.
It'd be great to see this series develop as I'm sure there are plenty of devs like me who are used to Apollo and have a solid understanding of graphql but have to learn the new syntax of spring-graphql. I'm sure you've implemented gql interfaces and I haven't got to that part of the docs yet!
For anyone struggling to get to the working server stage I suggest checking the dependencies again, I missed / got confused when we went back to add the in memory SQL.
Great video! Keep up the hard work!
Wow! Good to see things this way
Thanks a lot for the demo. The project looks great. Let's see how it grows
Josh Long never failed me
Thank you for great demo. Hoping for spring security and testing
Man !!!... So useful !!! :)thank you very much !!!
Great presentation! I had a question - how are errors handled in SpringBoot graphql? In REST for instance, I could return a 404 if I don't find a record corresponding to a query but in graphql at least from what I see in the graphiql UI I get an INTERNAL_ERROR as the error classification and don't see an error code. Is there a way to return HTTP error codes?
DGS is schema centric, schema first too! I use it that way.
Btw these 'fetchers' of related data can quickly lead to N+1 problems. Calling N time in parallel using reactive will just reduce the latency, but the payload to the data source containing related data will be huuuuuugeeeeee...
Sounds too familiar issue...
100% - the N+1 problem is a very real problem. Ideally, you wouldn't have your service architecture setup to require that, but it sometimes happens, and at least reactive programming and Spring GraphQL make it as concise and easy to implement as possible.
Can the order service be in its own spring boot application? How would spring stitches the customer and order service schema together, Is there a gateway involved that knows where the customer service and order service is located ?
Thank you Josh!
Hello,
I'm new to spring boot and graphql so my question might be dump but I didn't see any answer on internet so i'm asking it here.
What's the difference between the graphql resolvers and the sring boot Controller ?
Most of the tutorials I see on google and youtube are using these specific ways (some are also using services but it seems less popular) of mapping a query to an execution that will retrieve data from a repository.
I can't find are the differences, do they have the same purpose or maybe I am misunderdanting something ? What is the best way to make that schema mapping between query and execution ?
I would be glad to have your thoughts about this, if my question isn't clear, tell me how i can explain it better.
Thanks for your help
Nice. Please bring integration with gRPC as well.
This is great, but any guides on integration testing the graphql endpoints with junit?
I followed along with the (very good) video and made all the code work locally (except for the web socket example). But I'm not able to make it work for a project of my own devising. I've created a non-reactive repository to interact with Mongo DB, created model classes to map the JSON documents into, added a web MVC controller to serve up the data. I'm able to see data coming back if I use a Swagger UI to communicate with a REST controller. But when I connect the /graphiql UI to my web MVC controller I get an "Error Fetching Schema" message in the Docs section. Setting logging to DEBUG didn't turn up any new information. I tried setting breakpoints but only fell into a hole. What's the best way to get information out to debug schema issues? All the other tutorials are not using the annotations that Josh does.
40:36 - Yeah, I spat out my drink. Well done! haha
With Code First approach, you wrote fewer code, and have less maintenance.
@SpringDeveloper (and also JoshLong) Would be possible to have a GraphQL code-first approach video? Instead of schema first?
I see that you are writing a graphql schema with types like Customer, Order, and then you have to duplicate thatin java code for the records for Customer Order, CustomerEvent, Duplication of CustomerEvent type enum in both sides.
What the spring boot application uses for the reactivecCrudRepositories, Subscribers, Flux, Mono is the Java code, not the schema. One can write something in the schema but what counts is what is on the classes, those classes are used in the medium and lower levels of abstraction. One can have a schema but that might differ from the classes unintentionally, there could be typos the could be other mistakes.
The schema is only used for the datafetchers for the annotations, only for communication not for what the business logic does. There is no guarantee that things will match.
While for some cases a Schema-first approach is good for innersource or internal services a code-first approach can fit better. You experienced the issue of doing Schema first on the customerId naming issue towards the end of the video, even a small codebase like this example from an experieced developer had such issue with mismatch 2 times. With a code-first approach you would only have had to debug the java code and the javascript, no need to make JavaSchemajavascript debugging :)
Josh how about having, another spring tips video or a Bootiful podcast with the awesome Dariusz Kuc? He has a talk about "Bootiful GraphQL with Kotlin" ua-cam.com/users/results?search_query=graphql+dariusz+kuc Thanks
How do we propagate the ReactorContext from the @QueryMapping of the Parent data to the @SchemaMapping of the child data fetcher?
Good tutorial, I have requirement like I have to write some data which comes in request (example like customer details)and return txt or pdf file
how to do that in my local machine
Please help me on this
How will it work with RestController?
Hi..can example for entire crud ?
for (var orderId = 1; orderId
you're absolutely right! thanks for lookin' out for me :-)
How do i connect the customer events handler method to the points where the events acutally spawn?
Do i implement something like a hot-stream service, that creates the "never ending" Flux and connect that to the handler method, so that other services can put things into that flux? Or what is the recommended approach?
where i can find the source code?)
I think 99% of real world projects will just have data stored in sql DB as relations. Last time I checked, r2dbc was unable to handle that. Did anything change?