Introduction to Facebook GraphQL

Introduction to Facebook GraphQL

GraphQL is a data query language used by Facebook since 2012 that was recently open sourced. It was designed to expose hierarchical data and make it easier for front-end developers to access it.

What does Facebook GraphQL look like?

Before diving in let’s see an example of GraphQL:

{  user(id: 3500401) {    id,    name,    isViewerFriend,    profilePicture(size: 50)  {      uri,      width,      height    }  }} 

The response would be:

{  "user" : {    "id": 3500401,    "name": "Jing Chen",    "isViewerFriend": true,    "profilePicture": {      "uri": "http://someurl.cdn/pic.jpg",      "width": 50,      "height": 50    }  }} 

Note the format of the query. It is not JSON, but the response is JSON.

GraphQL Motivation and Properties

The motivation for GraphQL was various problems and deficiencies in the alternatives for accessing hierarchical data by front-end applications. Namely REST APIs and ad-hoc endpoints. Both of these approaches are unsuitable for applications that need a lot of flexibility when accessing the data. GraphQL has several other properties that distinguish it from REST APIs. It is not transport specific and in particular not HTTP specific. Each query is just a string. No HTTP verbs or headers are required. That makes it well suited both for public APIs over HTTP as well as high performance internal APIs using faster transports like TCP or even UDP. GraphQL is also strongly typed, which helps a lot in managing complex data.

The bottom line is that with GraphQL a client can request arbitrary subsets of data from a graph with complete control over the amount, level of detail and shape of the returned results.

GraphQL Type System

To support all that goodness, GraphQL uses schemas based on a type system. The type system is very rich and supports features such as inheritance, interfaces, lists, custom objects, enumerated types and specifying if individual values are nullable. Here is a sample Star Wars themed schema:

enum Episode { NEWHOPE, EMPIRE, JEDI }interface Character {  id: String!  name: String  friends: [Character]  appearsIn: [Episode]}type Human : Character {  id: String!  name: String  friends: [Character]  appearsIn: [Episode]  homePlanet: String}type Droid : Character {  id: String!  name: String  friends: [Character]  appearsIn: [Episode]  primaryFunction: String} 

The Episodes is an enumeration of Star Wars episodes. The Character interface defines fields that are common to every Character-based type. The id field is a non-nullable string (the ! means non-null). The name is a nullable string (may be name is not available). The friends field is a list of Characters and appearsIn is a list of Episodes.

There are two types based on Character: Human and Droid. They have all the fields of Character, but Human adds a homePlanet field and Droid adds a primaryFunction field. GraphQL Queries Queries in GraphQL can be pretty sophisticated. On the backend you can attach custom code to provide query functionality beyond just returning nested subsets of the data. For example here is an implementation in EcmaScript 2015 A.K.A ED6 that allows to query for the hero of an episode:

name: 'Query',  fields: () => ({    hero: {      type: characterInterface,      args: {        episode: {          description: 'If omitted, returns the hero of the whole saga. If ' +                       'provided, returns the hero of that particular episode.',          type: episodeEnum        }      },      resolve: (root, { episode }) => getHero(episode),    }, 

Note, the “args” which expects an episode, which is one of the enumeration values specified earlier and then the “resolve” key, which specifies a getHero() function that expects the episode as an argument.

Here is a simple implementation of the getHero() function:

export function getHero(episode) {  if (episode === 5) {    // Luke is the hero of Episode V.    return luke;  }  // Artoo is the hero otherwise.  return artoo;} 

From the client-side you would invoke the query as:

query  {  hero(episode(JEDI)) {    name  }} 

The response would be:

{  "data": {    "hero": {      "name": "R2-D2"    }  }} 

Now, here is the cool part. Without any changes to the backend, you can run all kinds of variations on this query and ask for additional information about our hero.

For example, to also get the id and all the friends’ use this query:

{  hero(episode(JEDI)) {    id    name    friends {      id      name    }  }} 

The response would be something like:

{  "data": {    "hero": {      "id": "2001",      "name": "R2-D2",      "friends": [        {          "id": "1000",          "name": "Luke Skywalker"        },        {          "id": "1002",          "name": "Han Solo"        },        {          "id": "1003",          "name": "Leia Organa"        }      ]    }  }} 

Validation

The schema can save a lot of grief to developers both on the backend and the frontend by automatically detecting invalid queries and responding with detailed error messages that point to the source of the problem. This is especially important when constructing large nested queries where just saying “Invalid Query” doesn’t help the caller to figure out what’s wrong and how to fix it.

Here is an example of an invalid query:

# INVALID: hero is not a scalar, so fields are needed{  hero} 

Here is the response:

{  "errors": [    {      "message": "Field "name" of type "String" must not have asub selection.",      "locations": [        {          "line": 4,          "column": 10        }      ]    }  ]} 

Conclusion

GraphQL is an interesting development in the world of web applications and APIs that has been dominated by REST for years. It is still very young and there aren’t any mature implementations outside of Facebook. Creating a GraphQL server appears to be a non-trivial undertaking and it’s not clear at what scale it becomes useful.

devx-admin

devx-admin

Share the Post:
Razer Discount

Unbelievable Razer Blade 17 Discount

On September 24, 2023, it was reported that Razer, a popular brand in the premium gaming laptop industry, is offering an exceptional deal on their

Innovation Ignition

New Fintech Innovation Ignites Change

The fintech sector continues to attract substantial interest, as demonstrated by a dedicated fintech stage at a recent event featuring panel discussions and informal conversations

Import Easing

Easing Import Rules for Big Tech

India has chosen to ease its proposed restrictions on imports of laptops, tablets, and other IT hardware, allowing manufacturers like Apple Inc., HP Inc., and

Anthropic Investment

Amazon’s Bold Anthropic Investment

On Monday, Amazon announced its plan to invest up to $4 billion in the AI firm Anthropic, acquiring a minority stake in the process. This

Razer Discount

Unbelievable Razer Blade 17 Discount

On September 24, 2023, it was reported that Razer, a popular brand in the premium gaming laptop industry, is offering an exceptional deal on their Razer Blade 17 model. Typically

Innovation Ignition

New Fintech Innovation Ignites Change

The fintech sector continues to attract substantial interest, as demonstrated by a dedicated fintech stage at a recent event featuring panel discussions and informal conversations with industry professionals. The gathering,

Import Easing

Easing Import Rules for Big Tech

India has chosen to ease its proposed restrictions on imports of laptops, tablets, and other IT hardware, allowing manufacturers like Apple Inc., HP Inc., and Dell Technologies Inc. more time

Semiconductor Stock Plummet

Dramatic Downturn in Semiconductor Stocks Looms

Recent events show that the S&P Semiconductors Select Industry Index seems to be experiencing a downturn, which could result in a decline in semiconductor stocks. Known as a key indicator

Anthropic Investment

Amazon’s Bold Anthropic Investment

On Monday, Amazon announced its plan to invest up to $4 billion in the AI firm Anthropic, acquiring a minority stake in the process. This decision demonstrates Amazon’s commitment to

AI Experts Get Hired

Tech Industry Rehiring Wave: AI Experts Wanted

A few months ago, Big Tech companies were downsizing their workforce, but currently, many are considering rehiring some of these employees, especially in popular fields such as artificial intelligence. The

Lagos Migration

Middle-Class Migration: Undermining Democracy?

As the middle class in Lagos, Nigeria, increasingly migrates to private communities, a PhD scholar from a leading technology institute has been investigating the impact of this development on democratic

AI Software Development

ChatGPT is Now Making Video Games

Pietro Schirano’s foray into using ChatGPT, an AI tool for programming, has opened up new vistas in game and software development. As design lead at business finance firm Brex, Schirano

Llama Codebot

Developers! Here’s Your Chatbot

Meta Platforms has recently unveiled Code Llama, a free chatbot designed to aid developers in crafting coding scripts. This large language model (LLM), developed using Meta’s Llama 2 model, serves

Tech Layoffs

Unraveling the Tech Sector’s Historic Job Losses

Throughout 2023, the tech sector has experienced a record-breaking number of job losses, impacting tens of thousands of workers across various companies, including well-established corporations and emerging startups in areas

Chinese 5G Limitation

Germany Considers Limiting Chinese 5G Tech

A recent report has put forth the possibility that Germany’s Federal Ministry of the Interior and Community may consider limiting the use of Chinese 5G technology by local network providers

Modern Warfare

The Barak Tank is Transforming Modern Warfare

The Barak tank is a groundbreaking addition to the Israeli Defense Forces’ arsenal, significantly enhancing their combat capabilities. This AI-powered military vehicle is expected to transform the way modern warfare

AI Cheating Growth

AI Plagiarism Challenges Shake Academic Integrity

As generative AI technologies like ChatGPT become increasingly prevalent among students and raise concerns about widespread cheating, prominent universities have halted their use of AI detection software, such as Turnitin’s

US Commitment

US Approves Sustainable Battery Research

The US Department of Energy has revealed a $325 million commitment in the research of innovative battery types, designed to enable solar and wind power as continuous, 24-hour energy sources.

Netanyahu Musk AI

Netanyahu and Musk Discuss AI Future

On September 22, 2023, Israeli Prime Minister Benjamin Netanyahu met with entrepreneur Elon Musk in San Francisco prior to attending the United Nations. In a live-streamed discussion, Netanyahu lauded Musk

Urban Gardening

Creating Thriving Cities Through Urban Gardening

The rising popularity of urban gardening is receiving increased recognition for its numerous advantages, as demonstrated in a recent study featured in the Environmental Research Letters journal. Carried out by

What You Need to Know About Cloud Security Strategies

What You Need to Know About Cloud Security Strategies

Today, many businesses are adopting cloud computing services. As a result, it’s important to recognize that security measures for data in the cloud are different from those in traditional on-premises

Romanian Energy Security

Eastern Europe is Achieving Energy Security

Canada and Romania have solidified their commitment to energy security and independence from Russian energy exports by signing a $3-billion export development agreement. The deal is centered on constructing two

Seamless Integration

Unlocking Seamless Smart Home Integration

The vision of an intelligently organized and interconnected smart home that conserves time, energy, and resources has long been desired by many homeowners. However, this aspiration has often been hindered

New Algorithm

MicroAlgo’s Groundbreaking Algorithm

MicroAlgo Inc. has revealed the creation of a knowledge-augmented backtracking search algorithm, developed through extensive research in evolutionary computational techniques. The algorithm is designed to boost problem-solving effectiveness, precision, and

Poland Energy Future

Westinghouse Builds Polish Power Plant

Westinghouse Electric Company and Bechtel have come together to establish a formal partnership in order to design and construct Poland’s inaugural nuclear power plant at the Lubiatowo-Kopalino site in Pomerania.

EV Labor Market

EV Industry Hurting For Skilled Labor

The United Auto Workers strike has highlighted the anticipated change towards a future dominated by electric vehicles (EVs), a shift which numerous people think will result in job losses. However,