GraphQL is a rabbit hole. Don't use it unless absolutely necessary or you have a small to mid-sized team for large scale projects. Atleast on Phoenix/Elixir side of things, it's just not worth the effort - you need to write resolvers apart from your schema/models, handle changeset errors in the frontend (which there is no way to deal with directly as of this comment) and if you're working with VueJS, then good luck. My package.json is so bloated that I am starting to feel it's all just a pack of cards. I can't stress enough how much valuable developer time I wasted getting all these bits and pieces working together. Usually, you can't use one because the other one is outdated, or has some weird Github issue you now need to address. And then that causes another probelm..and another one..[the rabbit hole goes deep]
"@babel/core": "^7.0.0",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.0.0",
"apollo-absinthe-upload-link": "^1.5.0",
"apollo-cache-inmemory": "^1.6.1",
"apollo-client": "^2.6.1",
"apollo-link": "^1.2.11",
"apollo-link-context": "^1.0.17",
"babel-loader": "^8.0.0",
"babel-preset-env": "^1.7.0",
"coffee-loader": "^0.9.0",
"copy-webpack-plugin": "^4.5.0",
"css-loader": "^2.1.1",
"file-loader": "^3.0.1",
"graphql": "^14.3.1",
"graphql-tag": "^2.10.1",
"mini-css-extract-plugin": "^0.4.0",
"node-sass": "^4.12.0",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"resolve-url-loader": "^3.1.0",
"sass-loader": "^7.1.0",
"script-loader": "^0.7.2",
"style-loader": "^0.23.1",
"uglifyjs-webpack-plugin": "^1.2.4",
"vue-apollo": "^3.0.0-beta.30",
"vue-loader": "^15.7.0",
"vue-template-compiler": "^2.6.10",
When DHH ranted about these, I never believed him and I always thought he was not upto par with JS frameworks. But turns out, everything he said was true. Turns out, you don't need GraphQL at all for most use cases when you can simply get away with something like Tubrolinks or LiveView.