Create API Gateway with fast-gateway

Introduction

In this article, I will guide you on how to use fast-gateway to deploy a simple API Gateway on NodeJS along with express. The advantage of an API Gateway is that it acts as an intermediary layer to hide the rest of the system, including services, commonly used in Microservices architecture.

Example Usage

This is the Microservices model after deployment:

    First, install the package

    yarn add fast-gateway


    Next, define the ports that will be used.

    import * as express from 'express'
    import * as gateway from 'fast-gateway'

    const portGateway = 5000
    const portService1 = 5001
    const portService2 = 5002


    Define service 1 as follows:

    const startService1 = (): void => {
    const app = express()
    app.get('/list', (req, res) => {
    const items = [
    {
    id: 1,
    name: 'service 1 value 1',
    },
    {
    id: 2,
    name: 'service 1 value 2',
    },
    ]
    res.status(200).json(items)
    })
    app.get('/', (req, res) => {
    res.send('Service 1 index')
    })

    app.listen(portService1, () => {
    console.log('Service 1 running at http://localhost:' + portService1)
    })
    }

    The content is quite simple: I just use Express to start the service.


    Service 2 is similar.

    const startService2 = (): void => {
    const app = express()
    app.get('/list', (req, res) => {
    const items = [
    {
    id: 1,
    name: 'service 2 value 1',
    },
    {
    id: 2,
    name: 'service 2 value 2',
    },
    ]
    res.status(200).json(items)
    })

    app.get('/', (req, res) => {
    res.send('Service 2 index')
    })

    app.listen(portService2, () => {
    console.log('Service 2 running at http://localhost:' + portService2)
    })
    }


    After that, just define the Gateway and start the services.

    const startGateWay = (): void => {
    const server = gateway({
    routes: [
    {
    prefix: '/service-1',
    target: `http://localhost:${portService1}/`,
    },
    {
    prefix: '/service-2',
    target: `http://localhost:${portService2}/`,
    },
    ],
    })

    server
    .get('/', (req, res) => {
    res.send('Gateway index')
    })
    .get('/about', (req, res) => {
    res.send('Gateway about')
    })

    server.start(portGateway).then(server => {
    console.log('Gateway is running at http://localhost:' + portGateway)
    })
    }

    startService1()
    startService2()
    startGateWay()

    In a real-world scenario, each service would typically be a separate project repository.


    Next, when you access the pages http://localhost:5000/service-1/ or http://localhost:5000/service-2/, they will be forwarded to the corresponding service.


    Happy coding!

    Comments

    Popular posts from this blog

    Kubernetes Practice Series

    NodeJS Practice Series

    Docker Practice Series

    React Practice Series

    Sitemap

    Setting up Kubernetes Dashboard with Kind

    Explaining Async/Await in JavaScript in 10 Minutes

    Deploying a NodeJS Server on Google Kubernetes Engine

    What is react-query? Why should we use react-query?