DEV Community

Cover image for GraphQL: A Beginner's Guide
Biswas Prasana Swain
Biswas Prasana Swain

Posted on

GraphQL: A Beginner's Guide

GraphQL is a powerful and flexible query language designed to make it easier for apps to fetch data from servers. If you've ever used an app and wondered how it gets all the information it needs to display, the answer is often an API (Application Programming Interface). GraphQL is a modern way of designing these APIs.

In this guide, we’ll explore GraphQL step by step with simple explanations and pseudocode, so you can understand it as if you are just starting to code.


What is GraphQL?

Imagine you go to a restaurant, and you want pizza, pasta, and a drink. Normally, you'd have to order each separately (like traditional APIs). But what if the waiter could understand exactly what you want and bring it all at once? That’s GraphQL!

GraphQL lets you ask for exactly the data you need in a single request, no more, no less.


How Does GraphQL Work?

GraphQL revolves around three key ideas:

  1. Schema: A blueprint of all the data available in your system.
  2. Query: A request to get specific data.
  3. Resolvers: The logic that fetches the data when you ask for it.

Let’s break this down.


Example Scenario: A Library System

Imagine a library where we need information about books, authors, and readers.

1. The Schema

The schema defines the "shape" of the data. Think of it like a menu at a restaurant.

Pseudocode:

type Book {
  title: String
  author: Author
  publishedYear: Int
}

type Author {
  name: String
  age: Int
  books: [Book]
}

type Query {
  getBook(title: String): Book
  getAllBooks: [Book]
  getAuthor(name: String): Author
}
Enter fullscreen mode Exit fullscreen mode
  • Book: Represents a book with a title, an author, and the year it was published.
  • Author: Represents an author with a name, age, and list of books they’ve written.
  • Query: Lists the possible questions (queries) you can ask about the library data.

2. Writing Queries

A query is like asking a question. With GraphQL, you can ask for only the data you need.

Pseudocode:

# Example Query: Get details of a book
{
  getBook(title: "Harry Potter") {
    title
    author {
      name
    }
    publishedYear
  }
}
Enter fullscreen mode Exit fullscreen mode

Expected result:

{
  "data": {
    "getBook": {
      "title": "Harry Potter",
      "author": {
        "name": "J.K. Rowling"
      },
      "publishedYear": 1997
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Notice how we only ask for title, author.name, and publishedYear. This saves time and resources.


3. Resolvers

Resolvers are like chefs in the kitchen. When you order food, the chefs prepare it for you. Similarly, resolvers fetch the data you’ve requested.

Pseudocode:

const resolvers = {
  Query: {
    getBook: (parent, args, context) => {
      // Example: Find the book with the given title
      return libraryData.books.find(book => book.title === args.title);
    },
    getAllBooks: () => {
      return libraryData.books;
    },
    getAuthor: (parent, args) => {
      return libraryData.authors.find(author => author.name === args.name);
    }
  }
};
Enter fullscreen mode Exit fullscreen mode
  • parent: Information from the previous resolver (if any).
  • args: Arguments passed in the query (e.g., title: "Harry Potter").
  • context: Shared data like user authentication.

Why Use GraphQL?

Here’s why developers love GraphQL:

  1. Efficient Data Fetching: No over-fetching (getting too much data) or under-fetching (not getting enough).
  2. Single Endpoint: Unlike traditional APIs with multiple URLs, GraphQL uses a single endpoint.
  3. Real-Time Data: GraphQL supports subscriptions, letting you get live updates (like stock prices or sports scores).

How Does GraphQL Compare to REST APIs?

Feature REST GraphQL
Data Fetching Multiple endpoints Single endpoint
Data Customization Limited Flexible queries
Efficiency Over-fetching possible Only fetch what you need

Putting It All Together: A Library App Example

Here’s how a complete query might look in our library app:

Query:

{
  getAuthor(name: "J.K. Rowling") {
    name
    books {
      title
      publishedYear
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Result:

{
  "data": {
    "getAuthor": {
      "name": "J.K. Rowling",
      "books": [
        { "title": "Harry Potter", "publishedYear": 1997 },
        { "title": "Fantastic Beasts", "publishedYear": 2001 }
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Key Terms to Remember

  • Schema: The structure of the data.
  • Query: A request for data.
  • Mutation: A request to change (create, update, delete) data.
  • Resolver: The code that fetches or modifies the data.
  • Subscription: For real-time updates.

Conclusion

GraphQL is like a customizable waiter for data. It simplifies how applications fetch, update, and manage data, making life easier for developers and users. With a clear schema, flexible queries, and efficient resolvers, it’s a great tool for modern app development.

Whether you’re building the next Instagram or a simple library app, understanding GraphQL will set you up for success!

Top comments (0)