When developing your client, pay particular attention to nullable types in the GraphQL schema.
The main issue is to ensure that the server gets the right information to fulfill the request.
Nullable types are the default in GraphQL, and that makes a good API versioning story, but it can easily lead to obscure problems if you are not careful.
Two GraphQL engineers thoughtsLook at an open API (like GitHub) with GraphIQL to get familiar with the GraphQL Language — Michael ParisMichael Paris started Scaphold prior to joining AWS on the AWS AppSync team and has been working with GraphQL services since Facebook open-sourced the technology in late 2015.
His thoughts?One of the tools that made GraphQL popular is GraphiQL — a web-based GraphQL API explorer.
The impact it has on being able to understand an API is amazing.
Go look at an open API (like GitHub) with GraphiQL and get familiar with the language.
Well-defined operations are important.
Once you get into more complex scenarios, you have to decide between more focused operations vs.
a general query.
While general queries (such as searchAllRestaurants) with an expansive input type for arguments is tempting, more focused operations (such as searchRestaurantsByName) are easier to optimize.
There is no namspacing in GraphQL, so use long unambiguous names for your operations and types.
Really think how you will handle authorization.
For larger organizations, push authorization to the service, but for smaller organizations, it’s ok for authorization to be placed in the GraphQL schema.
Use the errors response properly and deal with a partial response.
REST tends to either succeed or fail and can be handled using the HTTP response codes.
With GraphQL, you may be authorized to access one part of the graph and not another, so errors and a partial result are quite possible.
One thing Michael wished he had known or delved into earlier was NoSQL.
If you are going to store data in NoSQL, then you have to think about how that impacts your service.
It’s a shift in mindset on how to model data and how to query the NoSQL data within GraphQL resolvers.
Figure out not only the data model but also the access patterns.
— Michael ParisFinally, before you start coding, figure out not only the data model but also the access patterns.
This will allow you to design an efficient schema for your service.
As the principal engineer on AWS AppSync, Rohan Deshpande has seen and solved his share of developer issues.
He likes looking at GraphiQL as a learning tool.
He started his learning using howtographql.
com — a site run by Prisma (so it’s a little biased) but still with excellent information.
Going through the full tutorial allowed him to ramp up quickly.
His major problem is learning was getting into native development and the Apollo client too quickly.
The Apollo client has a lot of extra considerations that just aren’t important when you start learning about the technology.
He got much more traction when he switched over to a web-based app for learning.
GraphQL is about only asking for what you need.
It doesn’t matter if it’s a query, mutation, or subscription — never ask for more than you need.
— Rohan Deshpande.
Rohan sees a lot of customer issues that are generated because the developer didn’t consider the user experience.
For example, developers don’t take advantage of batching.
Rather than doing 5000 mutations, restructure your schema to provide the ability to submit batches of 25 items.
Your user gets a more responsive app and you reduce the number of calls, which reduces the drain on the battery and the network requirements.
Don’t look at the API just from the perspective of an API call.
Include the user experience in your API design — Rohan Deshpande.
GraphQL is primarily a client-server (as opposed to server-server) API surface, so you should always include the impact on the user experience.
It may be responsiveness, network utilization, or battery drain.
There is almost always a user experience effect when you design such an APIWrap upThere are definitely some best practices:Get to know GraphQL by looking at real services using GraphiQL.
Follow the experts and read the tutorials (but only the latest tutorials).
Spend time understanding the information graphSimplify the backend setup using services and concentrate your learning on the front end.
Ask questions — you will be surprised how many people are willing to help.
There are also some well known worst practices:Skip the older tutorials as they are likely to be out of date.
Don’t assume your knowledge of REST or other APIs is translatable to GraphQL.
Client libraries may help in the long term, but they can obscure complex interactions that you need to understand.