DEV Community

Cover image for Step-by-Step Guide to Using the Hashnode API for Developers
Deepak Kumar
Deepak Kumar

Posted on • Originally published at raajaryan.tech

Step-by-Step Guide to Using the Hashnode API for Developers

Welcome to this comprehensive guide on using the Hashnode API! Whether you're a seasoned developer or just starting out, this post will equip you with everything you need to know about interacting with Hashnode's powerful API. By the end of this guide, you'll be able to fetch articles, publish content, and integrate these capabilities seamlessly into your MERN stack projects. Let's dive in!

Table of Contents

  1. Introduction to Hashnode API
  2. Getting Started
  3. Understanding GraphQL
  4. Fetching Articles
  5. Publishing Articles
  6. Handling Responses
  7. Integrating with MERN Stack
  8. Practical Applications
  9. Advanced Tips and Tricks
  10. Conclusion

Introduction to Hashnode API

Hashnode is a popular blogging platform that allows developers to share their knowledge and grow their personal brand. The Hashnode API provides a way to interact programmatically with the platform, enabling you to manage your content, fetch articles, and more. This guide will walk you through the process of using the Hashnode API effectively.

Getting Started

Creating a Hashnode Account

Before you can use the Hashnode API, you need to have a Hashnode account. If you don't already have one, follow these steps:

  1. Visit Hashnode: Go to Hashnode.
  2. Sign Up: Click on the "Sign Up" button and follow the instructions to create your account.

Generating API Key

Once you have a Hashnode account, you need to generate an API key to authenticate your requests:

  1. Log In: Sign in to your Hashnode account.
  2. Profile Settings: Navigate to your profile settings.
  3. Generate API Key: Look for the API key section and generate a new API key. Make sure to store this key securely as it will be used to authenticate your API requests.

Understanding GraphQL

The Hashnode API is a GraphQL API, which means it uses GraphQL queries and mutations to interact with the data. Let's start with the basics of GraphQL.

GraphQL Basics

GraphQL is a query language for APIs that allows clients to request only the data they need. It provides a more efficient and flexible alternative to REST.

  • Query: A read-only operation to fetch data.
  • Mutation: A write operation to modify data.

Query vs. Mutation

In GraphQL, queries are used to fetch data, while mutations are used to modify data. Understanding the difference between these two is crucial for interacting with the Hashnode API.

  • Query Example: Fetching a list of articles.
  • Mutation Example: Publishing a new article.

Fetching Articles

Let's start by fetching articles from Hashnode using a GraphQL query.

GraphQL Query for Fetching Articles

Here's a basic GraphQL query to fetch articles from a user's publication:

{
  user(username: "YOUR_HASHNODE_USERNAME") {
    publication {
      posts {
        title
        brief
        coverImage
        slug
        dateAdded
        author {
          name
          photo
        }
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Making Requests with cURL

You can make a request to the Hashnode API using cURL. Here's an example:

curl -X POST https://api.hashnode.com \
  -H "Content-Type: application/json" \
  -H "Authorization: YOUR_API_KEY" \
  -d '{
    "query": "{ user(username: \"YOUR_HASHNODE_USERNAME\") { publication { posts { title brief coverImage slug dateAdded author { name photo } } } } }"
  }'
Enter fullscreen mode Exit fullscreen mode

Using Axios in JavaScript

For JavaScript developers, Axios is a popular library for making HTTP requests. Here's how you can use it to fetch articles:

import axios from 'axios';

const fetchArticles = async () => {
  const query = `
    {
      user(username: "YOUR_HASHNODE_USERNAME") {
        publication {
          posts {
            title
            brief
            coverImage
            slug
            dateAdded
            author {
              name
              photo
            }
          }
        }
      }
    }
  `;
  const response = await axios.post('https://api.hashnode.com', {
    query: query,
  }, {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'YOUR_API_KEY',
    },
  });
  console.log(response.data);
};

fetchArticles();
Enter fullscreen mode Exit fullscreen mode

Publishing Articles

Now that we've covered fetching articles, let's move on to publishing articles using a GraphQL mutation.

GraphQL Mutation for Publishing Articles

Here's an example mutation to publish a new article:

mutation {
  createStory(
    input: {
      title: "My New Blog Post"
      contentMarkdown: "This is the content of my new blog post."
      coverImageURL: "https://example.com/cover-image.jpg"
      tags: [{ _id: "5674470281e3abac9b3e0043", name: "programming" }]
    }
  ) {
    code
    success
    message
  }
}
Enter fullscreen mode Exit fullscreen mode

Making Requests with cURL

You can publish an article using cURL as well. Here's an example:

curl -X POST https://api.hashnode.com \
  -H "Content-Type: application/json" \
  -H "Authorization: YOUR_API_KEY" \
  -d '{
    "query": "mutation { createStory(input: { title: \"My New Blog Post\", contentMarkdown: \"This is the content of my new blog post.\", coverImageURL: \"https://example.com/cover-image.jpg\", tags: [{ _id: \"5674470281e3abac9b3e0043\", name: \"programming\" }] }) { code success message } }"
  }'
Enter fullscreen mode Exit fullscreen mode

Using Axios in JavaScript

Here's how you can use Axios to publish an article:

import axios from 'axios';

const publishArticle = async () => {
  const mutation = `
    mutation {
      createStory(
        input: {
          title: "My New Blog Post"
          contentMarkdown: "This is the content of my new blog post."
          coverImageURL: "https://example.com/cover-image.jpg"
          tags: [{ _id: "5674470281e3abac9b3e0043", name: "programming" }]
        }
      ) {
        code
        success
        message
      }
    }
  `;
  const response = await axios.post('https://api.hashnode.com', {
    query: mutation,
  }, {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'YOUR_API_KEY',
    },
  });
  console.log(response.data);
};

publishArticle();
Enter fullscreen mode Exit fullscreen mode

Handling Responses

Understanding how to handle the responses from the Hashnode API is crucial for building robust applications.

Interpreting JSON Responses

The Hashnode API returns responses in JSON format. Here's an example response for fetching articles:

{
  "data": {
    "user": {
      "publication": {
        "posts": [
          {
            "title": "My First Blog Post",
            "brief": "This is a brief description of my first blog post.",
            "coverImage": "https://example.com/cover-image.jpg",
            "slug": "my-first-blog-post",
            "dateAdded": "2024-06-30",
            "author": {
              "name": "Deepak Kumar",
              "photo": "https://example.com/photo.jpg"
            }
          }
        ]
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Error Handling

When making API requests, it's important to handle errors gracefully. Here's an example of how to handle errors

in Axios:

import axios from 'axios';

const fetchArticles = async () => {
  const query = `
    {
      user(username: "YOUR_HASHNODE_USERNAME") {
        publication {
          posts {
            title
            brief
            coverImage
            slug
            dateAdded
            author {
              name
              photo
            }
          }
        }
      }
    }
  `;
  try {
    const response = await axios.post('https://api.hashnode.com', {
      query: query,
    }, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'YOUR_API_KEY',
      },
    });
    console.log(response.data);
  } catch (error) {
    console.error('Error fetching articles:', error);
  }
};

fetchArticles();
Enter fullscreen mode Exit fullscreen mode

Integrating with MERN Stack

Integrating the Hashnode API with your MERN stack projects allows you to build dynamic and interactive applications. Let's explore both frontend and backend integrations.

Frontend Integration

For frontend integration, you can use React along with Axios to fetch and display articles. Here's a basic example:

App.js

import React, { useEffect, useState } from 'react';
import axios from 'axios';

const App = () => {
  const [articles, setArticles] = useState([]);

  useEffect(() => {
    const fetchArticles = async () => {
      const query = `
        {
          user(username: "YOUR_HASHNODE_USERNAME") {
            publication {
              posts {
                title
                brief
                coverImage
                slug
                dateAdded
                author {
                  name
                  photo
                }
              }
            }
          }
        }
      `;
      try {
        const response = await axios.post('https://api.hashnode.com', {
          query: query,
        }, {
          headers: {
            'Content-Type': 'application/json',
            'Authorization': 'YOUR_API_KEY',
          },
        });
        setArticles(response.data.data.user.publication.posts);
      } catch (error) {
        console.error('Error fetching articles:', error);
      }
    };

    fetchArticles();
  }, []);

  return (
    <div>
      <h1>My Hashnode Articles</h1>
      <ul>
        {articles.map((article) => (
          <li key={article.slug}>
            <h2>{article.title}</h2>
            <p>{article.brief}</p>
            <img src={article.coverImage} alt={article.title} />
            <p>By: {article.author.name}</p>
            <img src={article.author.photo} alt={article.author.name} />
          </li>
        ))}
      </ul>
    </div>
  );
};

export default App;
Enter fullscreen mode Exit fullscreen mode

Backend Integration

For backend integration, you can use Node.js and Express to create endpoints that interact with the Hashnode API. Here's a basic example:

server.js

const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;

app.get('/fetch-articles', async (req, res) => {
  const query = `
    {
      user(username: "YOUR_HASHNODE_USERNAME") {
        publication {
          posts {
            title
            brief
            coverImage
            slug
            dateAdded
            author {
              name
              photo
            }
          }
        }
      }
    }
  `;
  try {
    const response = await axios.post('https://api.hashnode.com', {
      query: query,
    }, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'YOUR_API_KEY',
      },
    });
    res.json(response.data.data.user.publication.posts);
  } catch (error) {
    console.error('Error fetching articles:', error);
    res.status(500).send('Error fetching articles');
  }
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
Enter fullscreen mode Exit fullscreen mode

Practical Applications

Building a Blog Dashboard

One practical application of the Hashnode API is building a blog dashboard where you can manage and view your articles in one place. You can use React for the frontend and Node.js for the backend to create a seamless user experience.

Automating Content Publishing

Another practical application is automating content publishing. You can create scripts or applications that automatically publish articles to Hashnode based on predefined schedules or triggers.

Advanced Tips and Tricks

Optimizing GraphQL Queries

To optimize your GraphQL queries, request only the fields you need. This reduces the amount of data transferred and improves the performance of your application.

Using Environment Variables for API Keys

For security reasons, never hard-code your API keys in your code. Instead, use environment variables to store your API keys. Here's an example using Node.js:

.env

HASHNODE_API_KEY=your_api_key
Enter fullscreen mode Exit fullscreen mode

server.js

require('dotenv').config();
const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;

app.get('/fetch-articles', async (req, res) => {
  const query = `
    {
      user(username: "YOUR_HASHNODE_USERNAME") {
        publication {
          posts {
            title
            brief
            coverImage
            slug
            dateAdded
            author {
              name
              photo
            }
          }
        }
      }
    }
  `;
  try {
    const response = await axios.post('https://api.hashnode.com', {
      query: query,
    }, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': process.env.HASHNODE_API_KEY,
      },
    });
    res.json(response.data.data.user.publication.posts);
  } catch (error) {
    console.error('Error fetching articles:', error);
    res.status(500).send('Error fetching articles');
  }
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
Enter fullscreen mode Exit fullscreen mode

Conclusion

The Hashnode API is a powerful tool that allows developers to interact with their Hashnode account programmatically. By mastering the API, you can fetch articles, publish content, and integrate these capabilities into your MERN stack projects. We hope this guide has provided you with the knowledge and tools to leverage the Hashnode API effectively. Happy coding!


💰 You can help me by Donating

BuyMeACoffee

Top comments (0)