What is the difference between graphql-js buildSchema
and the apollo-server gql
? They appear to do a very similar job.
What is the difference between gql and buildSchema?
763 views Asked by spinkus At
1
There are 1 answers
Related Questions in GRAPHQL
- Meteor MapReduce Package Error: A method named is already defined
- Token based authorization in nodejs/ExpressJs and Angular(Single Page Application)
- Big data with spatial queries/indexing
- How to recover from losing all your /data/db
- What are the benefits of using the fields option when querying in Meteor
- Node JS Async Response
- mongoose get property from nested schema after `group`
- What to use for subdocuments ID's in MongoDB?
- ORM Code First versa Database First in Production
- How to profile a Yii2 based API?
Related Questions in APOLLO-SERVER
- Meteor MapReduce Package Error: A method named is already defined
- Token based authorization in nodejs/ExpressJs and Angular(Single Page Application)
- Big data with spatial queries/indexing
- How to recover from losing all your /data/db
- What are the benefits of using the fields option when querying in Meteor
- Node JS Async Response
- mongoose get property from nested schema after `group`
- What to use for subdocuments ID's in MongoDB?
- ORM Code First versa Database First in Production
- How to profile a Yii2 based API?
Related Questions in GRAPHQL-JS
- Meteor MapReduce Package Error: A method named is already defined
- Token based authorization in nodejs/ExpressJs and Angular(Single Page Application)
- Big data with spatial queries/indexing
- How to recover from losing all your /data/db
- What are the benefits of using the fields option when querying in Meteor
- Node JS Async Response
- mongoose get property from nested schema after `group`
- What to use for subdocuments ID's in MongoDB?
- ORM Code First versa Database First in Production
- How to profile a Yii2 based API?
Related Questions in GRAPHQL-TAG
- Meteor MapReduce Package Error: A method named is already defined
- Token based authorization in nodejs/ExpressJs and Angular(Single Page Application)
- Big data with spatial queries/indexing
- How to recover from losing all your /data/db
- What are the benefits of using the fields option when querying in Meteor
- Node JS Async Response
- mongoose get property from nested schema after `group`
- What to use for subdocuments ID's in MongoDB?
- ORM Code First versa Database First in Production
- How to profile a Yii2 based API?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Firstly note, apollo-server's
gql
is actually a re-export from graphql-tag.graphql-tag
is a ~150 line package who's default and pretty much only useful export isgql
.Quick bit of background: the
graphql-js
package provides an official reference implementation of GraphQL in Javascript. It provides two important things basically:graphql
function, which will process any GraphQL query against aGraphQLSchema
object (the GraphQLSchema object is how graphql-js represents your parsed schema).GraphQLSchema
objects used by thegraphql
function from strings.Now, this is the part that ultimately confused me: in
graphql-js
, taking a string and turning it into aGraphQLSchema
object is a two step process:parse
function).buildASTSchema
function).It is like this is because the AST (Abstract Syntax Tree) is useful to a bunch of other tools which aren't even necessarily aware of GraphQL (for example see https://astexplorer.net/), where as the GraphQLSchema is only meaningful to graphql-js and related softwares.
graphql-js exposes the functions for doing both steps and these are reused by downstream implementors (like Apollo).
buildSchema
is just a convenience wrapper to combine these two steps. It's literally this:The output of
gql
on the other hand is just the AST part, which is the same as the output from the graphql-jsparse
function.gql
doesn't return aGraphQLSchema
directly for the reason stated above: the AST is useful (notegql
is also doing some basic stuff like stateful caching and will merge an array of schema string into a single AST result ...). Eventually the AST will have to be turned into a proper schema though, and apollo-server does this when the server is instantiated (presumably).To show the relation, we can take the output of
gql
(same asparse
) run it throughbuildASTSchema
(likebuildSchema
does) then pass it tographql
and it works the same:Gives: