- read

Building a GraphQL API with Node.js: A Comprehensive Guide

Shamaz Saeed 29

Building a GraphQL API with Node.js: A Comprehensive Guide

Shamaz Saeed
Level Up Coding
Published in
2 min read20 hours ago

--

GraphQL API with Node.js

GraphQL is a powerful query language for your API, providing a more efficient and flexible alternative to REST. In this article, we’ll explore how to build a GraphQL API using Node.js. By the end of this guide, you’ll have a solid understanding of GraphQL and the tools needed to create your own GraphQL server.

Prerequisites

Before we begin, ensure you have Node.js installed on your system. You can download it from nodejs.org.

Setting Up the Project

Let’s start by creating a new Node.js project. Open your terminal and run the following commands:

mkdir graphql-node-api
cd graphql-node-api
npm init -y

Now, let’s install the required packages:

npm install express express-graphql graphql

We’ll use express for creating a web server, express-graphql as a middleware for handling GraphQL requests, and graphql for defining our schema.

Defining a GraphQL Schema

A GraphQL schema defines the structure of your API and the types of data it can return. Create a file named schema.js in your project directory:

// schema.js
const { GraphQLObjectType, GraphQLSchema, GraphQLString } = require('graphql');
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
hello: {
type: GraphQLString,
resolve() {
return 'Hello, GraphQL!';
},
},
},
});
module.exports = new GraphQLSchema({
query: RootQuery,
});

In this example, we define a simple RootQuery with one field, hello, which returns the string "Hello, GraphQL!".

Creating the GraphQL Server

Now, let’s set up our GraphQL server using Express. Create a file named server.js:

// server.js
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const schema = require('./schema');
const app = express();
app.use('/graphql', graphqlHTTP({ schema, graphiql: true }));
const port = process.env.PORT || 4000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});