1. Home
  2. /
  3. Hapi
  4. /
  5. Hapi.js Simple REST API

Hapi.js Simple REST API - Hapi Typing CST Test

Loading…

Hapi.js Simple REST API — Hapi Code

Demonstrates a simple Hapi.js server with routes for listing and creating Todo items.

const Hapi = require('@hapi/hapi');

const todos = [];

const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    server.route({
        method: 'GET',
        path: '/todos',
        handler: (request, h) => todos
    });

    server.route({
        method: 'POST',
        path: '/todos',
        handler: (request, h) => {
            const todo = request.payload;
            todos.push(todo);
            return h.response(todo).code(201);
        }
    });

    await server.start();
    console.log('Server running on %s', server.info.uri);
};

init();

Hapi Language Guide

Hapi is a rich, flexible web framework for Node.js designed to build scalable and maintainable applications and services with configuration-driven architecture and powerful plugin system.

Primary Use Cases

  • ▸REST APIs and GraphQL endpoints
  • ▸Enterprise web applications
  • ▸Microservices with plugin-based modularity
  • ▸Secure backends with authentication/authorization
  • ▸Server-side rendering and templating

Notable Features

  • ▸Configuration-driven routing and plugins
  • ▸Built-in input validation with Joi
  • ▸Caching and state management support
  • ▸Authentication strategies and security plugins
  • ▸Extensible plugin system for modular apps

Origin & Creator

Created by Eran Hammer in 2011 and maintained by the Hapi community.

Industrial Note

Hapi is widely used in large-scale enterprise applications, APIs, and microservices where configuration consistency, security, and maintainability are priorities.

Quick Explain

  • ▸Hapi provides a robust plugin-based architecture for modularity and reusability.
  • ▸Supports routing, input validation, caching, authentication, and error handling out of the box.
  • ▸Highly configurable for enterprise-grade applications.
  • ▸Integrates easily with other Node.js libraries and databases.
  • ▸Emphasizes maintainable code and standardized practices across teams.

Core Features

  • ▸Routing and request lifecycle management
  • ▸Plugins for modular functionality
  • ▸Input validation and error handling
  • ▸Caching and session support
  • ▸Authentication and authorization strategies

Learning Path

  • ▸Learn Node.js basics
  • ▸Understand Hapi server and routing
  • ▸Learn Joi validation and error handling
  • ▸Work with plugins and modular design
  • ▸Build small apps and progressively complex APIs

Practical Examples

  • ▸Build a REST API with Joi input validation
  • ▸Create authentication system with JWT or OAuth
  • ▸Implement caching using Catbox
  • ▸Develop plugin-based modular microservices
  • ▸Serve server-side rendered pages with Vision templating

Comparisons

  • ▸Hapi vs Express: Hapi more structured, Express more minimal
  • ▸Hapi vs Fastify: Hapi richer features, Fastify optimized for speed
  • ▸Hapi vs Koa: Hapi configuration-driven, Koa middleware-centric
  • ▸Hapi vs NestJS: NestJS TypeScript-first, Hapi JavaScript/TS flexible
  • ▸Hapi vs LoopBack: Hapi general-purpose, LoopBack API-first design

Strengths

  • ▸Highly modular and configurable
  • ▸Strong focus on security and input validation
  • ▸Scales well for large, enterprise apps
  • ▸Plugin ecosystem simplifies adding features
  • ▸Well-documented and supported by active community

Limitations

  • ▸Requires understanding of Node.js and Hapi lifecycle
  • ▸Steeper learning curve compared to Express
  • ▸Less lightweight than minimal frameworks like Fastify
  • ▸Smaller ecosystem than Express
  • ▸Can feel verbose for simple apps

When NOT to Use

  • ▸Simple static sites
  • ▸Rapid prototyping with minimal boilerplate needs
  • ▸Teams unfamiliar with Node.js ecosystem
  • ▸When performance-critical microservices are needed (Fastify may be better)
  • ▸When using a full-stack TypeScript framework like NestJS for consistency

Cheat Sheet

  • ▸npm init -y - create new project
  • ▸npm install @hapi/hapi - install Hapi
  • ▸node server.js - run server
  • ▸npm test - run tests with Lab
  • ▸server.route({ method, path, handler }) - define route

FAQ

  • ▸Is Hapi open-source? -> Yes, BSD license.
  • ▸Does Hapi support TypeScript? -> Yes, fully supported.
  • ▸Can Hapi handle large-scale apps? -> Yes, designed for enterprise usage.
  • ▸Does Hapi support authentication? -> Yes, with built-in strategies.
  • ▸How do you test Hapi apps? -> Using Lab and Code testing framework.

30-Day Skill Plan

  • ▸Week 1: Setup Hapi server and simple routes
  • ▸Week 2: Add input validation and error handling
  • ▸Week 3: Implement plugins and modular architecture
  • ▸Week 4: Add authentication and caching
  • ▸Week 5: Deploy and monitor server in production

Final Summary

  • ▸Hapi is a Node.js web framework emphasizing configuration-driven design and plugins.
  • ▸Supports routing, validation, caching, authentication, and server-side templating.
  • ▸Ideal for enterprise-grade applications and APIs.
  • ▸Modular, maintainable, and secure with strong community support.
  • ▸Integrates easily with Node.js ecosystem libraries and tools.

Project Structure

  • ▸server.js - main application entry point
  • ▸routes/ - route definitions
  • ▸handlers/ - route logic
  • ▸plugins/ - modular features
  • ▸package.json - project dependencies

Monetization

  • ▸Hapi is open-source (BSD license)
  • ▸Commercial consulting via Node.js ecosystem
  • ▸Enterprise applications benefit from maintainable architecture
  • ▸Integrates with cloud services for production deployments
  • ▸Supports building secure, compliant backends for clients

Productivity Tips

  • ▸Use plugins for reusable functionality
  • ▸Validate all inputs with Joi
  • ▸Keep handlers modular and async
  • ▸Leverage Catbox for caching
  • ▸Use lifecycle events to manage cross-cutting concerns

Basic Concepts

  • ▸Server - main application instance
  • ▸Route - maps HTTP requests to handlers
  • ▸Handler - function processing request and returning response
  • ▸Plugin - modular package adding functionality
  • ▸Lifecycle methods - hooks during request/response handling

Official Docs

  • ▸https://hapi.dev/
  • ▸Hapi GitHub repository
  • ▸Community tutorials and forums

Practice Other Languages

CReactPythonC++RustTypeScriptKotlinPHPJavaC#RubyMqlCqlN1qlCypher