The GraphQL type system is described in section 3 of the specification. Per the specification itself,
The GraphQl Type system describes the capabilities of a GraphQL service and is used to determine if a requested operation is valid, to guarantee the type of response results, and describes the input types of variables to determine if values provided at request time are valid.
This feature of the specification for the GraphQL language uses Interface Definition Language (IDL) to describe the type system. This can be used by tools to provide utility function as client code genration or boot-strapping. In a lot of the services and products around GraphQL like AppSync, Hasura, and others you’ll see this specifically in action. Tools that only execute requests can only allow TypeSystemDocument and disallow ExecuteDefintion or TypeSystemExtension to prevent extensions of the type system. If you do this be sure to provide a descriptive error for consumers of your data!
Let’s say you’ve built out your GraphQL API. Now let’s say you want a schema.graphql file but for some reason you don’t have your repo or for some reason it’s not immediately available. What to do? Here are two tools to get a quick schema of your GraphQL API by pointing them at your API and letting them introspect against it!
For both of these you’ll need to have NPM installed, which I’ll just assume you do if you’re dealing with GraphQL. If you don’t, head on out and get NPM and Node.js installed for good measure, and per my suggestion do yourself a favor and pick a version manager. I generally use nvm, check out details on install NVM here.
Before getting into this topic, let’s get clear definitions for Corporate Channel and Personal Channel for the context of this article with an added specific detailed definition for “advocate” and “advocacy”.
Corporate Channel: This is the channel of communications that falls within the realm of a corporate blog (like Digital Ocean’s Blog which is one of the best, HashiCorp’s, or New Relic’s are all examples), corporate Twitter account (the best of course are one’s like Wendy’s), and the normal slew of stuff on LinkedIn and Facebook. Largely, in all honesty developer’s rightfully just ignore the huge bulk of junk on both LinkedIn and Facebook. The other part of this channel is of course the plethora of ads that rain from corporations, but those aren’t anything to do with advocacy as you know except in a disingenuous way.
Personal Channel: This is the channel that often advocates work with most. This is advocacy that they work with and build up within the community that is largely autonomous of the corporate channel. However there is always a corporate entity – their employer or otherwise related – that will of course benefit also. But first and foremost the personal channel is one that an advocate builds for themselves, the community, and a particular technology, language, or other thing that they’re interested in. Above all things, from an external point of view this is where people who follow or consume an advocates gain trust for that particular individual.
Advocate/Advocacy: In this article, note that I’m using an expanded notion, simply put if you’re on Twitter or Github or somewhere public in even the slightest way you are indeed an advocate and providing advocacy for some technology product or platform. This includes people with titles like Developer, Engineer, Architect, or whatever else that has a professional presence online.