# Bookshelf API

> A simple RESTful API for managing bookshelf data, built with Hapi and Node.js.

Source: https://www.romi.my.id/projects/bookshelf-api
Author: Romi Muharom

Bookshelf API is a simple RESTful API for managing book data. It supports the basic CRUD flow: listing books, viewing a single book, adding a new book, updating a book, and deleting a book.

The project was built as a backend learning project using the Hapi framework on Node.js, with a focus on understanding API routing, request handling, and resource-based endpoint design.

## Overview

The API exposes a `/books` resource for bookshelf data. Each endpoint follows a straightforward REST pattern, making the project easy to test with tools like Postman or other API clients.

This project is intentionally small and focused. It is useful as a foundation for learning API structure before moving into larger systems with authentication, database persistence, validation layers, and deployment workflows.

## Problem

Learning backend development requires more than writing isolated functions. A developer needs to understand how HTTP methods map to actions, how route parameters work, and how a server responds to client requests.

The goal of this project was to implement those fundamentals through a simple bookshelf API.

## Role

I implemented the API routes, request handling, response behavior, and project documentation.

The project includes setup instructions and external API documentation for testing the endpoints.

## Stack

- Node.js for the runtime
- Hapi for the HTTP API framework
- JavaScript for the implementation
- npm for dependency management
- Postman for endpoint testing and documentation

## Features

- List all books
- View a book by ID
- Add a new book
- Update an existing book
- Delete a book by ID
- Test endpoints through an API client

## API Design

The API uses a simple REST structure:

| Method   | Endpoint          | Purpose                        |
| :------- | :---------------- | :----------------------------- |
| `GET`    | `/books`          | Retrieve all books             |
| `GET`    | `/books/{bookId}` | Retrieve a specific book by ID |
| `POST`   | `/books`          | Add a new book                 |
| `PUT`    | `/books/{bookId}` | Update a book by ID            |
| `DELETE` | `/books/{bookId}` | Delete a book by ID            |

This route structure keeps the resource model clear and easy to understand.

## Implementation Notes

The project focuses on API fundamentals: route definition, HTTP method handling, path parameters, request payloads, and JSON responses.

Because it is a learning-focused API, the implementation is intentionally direct. It can be extended later with persistent storage, input validation, authentication, pagination, and better error handling.

## Outcome

The result is a compact REST API that demonstrates the core workflow of resource management with Hapi and Node.js.

It works well as an introductory backend project and as a reference for building a predictable CRUD API structure.
