DEV Community

loading...

Discussion on: What are the cons of GraphQL?

benbot profile image
Benjamin Botwin

I just took a look and neither urql, Apollo-client, react-Apollo, nor their dependencies have the graphql package as a dependency.

Unless I just missed it, you shouldn’t have a graphql parser client side

Thread Thread
florianrappl profile image
Florian Rappl

Sorry either you don't know these libs or you just like trash talk.

  1. Apollo ships with it's own implementation. It still parses the queries (it needs to for several reasons).
  2. urql has a peer dep to graphql. See github.com/FormidableLabs/urql/blo....

Still a parser is needed as all these libs perform validation up front and provide additional capabilities such as caching. They could all be added without additional parsing, but then it would be more cumbersome for the dev thus making the abstraction useless.

Thread Thread
benbot profile image
Benjamin Botwin

Jeezus man chill out. I just checked their deps on npmjs.org.

Didn’t know to check peer deps.
Nor did I know that apollo shipped their own.

Thread Thread
gklijs profile image
Gerard Klijs

You can do without. The Clojurescript client just sends a string over the wire, and get a Clojure map back.

Thread Thread
benbot profile image
Benjamin Botwin

That’s what I was thinking, but, I guess, Apollo needs some info on the query for it’s caching solution.

Thread Thread
gklijs profile image
Gerard Klijs

That makes sense. The Clojurescript library is more low level. It might be nice to have something similar to Apollo. But I quite like the simplicity of just binding the results of a query to some data in de dB. It's also easy to combine queries and subscriptions that way.

Thread Thread
benbot profile image
Benjamin Botwin

The big draw to Apollo for me is honestly not so much the caching, alththats a big plus, but the fact that GraphQL-codegen can make fully typed Apollo hooks for each GraphQL query or mutation I write.

It’s magical.

Thread Thread
gklijs profile image
Gerard Klijs

Clojurescript isn't typed so that won't work :P. Although you could build something similar using spec. You could even use generative testing out of the box that way for components created that way.