---
title: "Introduction"
description: "Turns every Backbone operation into an HTTP endpoint with HATEOAS resources and an OpenAPI 3.1 spec, with no controllers"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-10-10"
last_update: "2026-10-10"
time_minutes: 2
draft: false
unlisted: false
url: "https://www.derafu.dev/docs/core/backbone-api/introduction"
---

# HTTP API With Zero Per-Operation Controllers

[![GitHub](https://img.shields.io/badge/github-derafu%2Fbackbone--api-blue?logo=github)](https://github.com/derafu/backbone-api)
![GitHub last commit](https://img.shields.io/github/last-commit/derafu/backbone-api/main)
![CI Workflow](https://github.com/derafu/backbone-api/actions/workflows/ci.yml/badge.svg?branch=main&event=push)
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/derafu/backbone-api)
![GitHub Issues](https://img.shields.io/github/issues-raw/derafu/backbone-api)
![Total Downloads](https://poser.pugx.org/derafu/backbone-api/downloads)
![Monthly Downloads](https://poser.pugx.org/derafu/backbone-api/d/monthly)

Turns every operation of every worker registered in a [Backbone](https://www.derafu.dev/docs/core/backbone) package registry into an HTTP endpoint automatically — no per-operation controller code, self-documenting as HATEOAS resources and an OpenAPI 3.1 spec.

## Why

Instead of writing `POST /invoices/build` → `InvoiceController::build()` by hand for each operation, you write one generic route pointing at one controller, and the URL path itself tells the package which worker method to call. The actual resolution and invocation is delegated entirely to [`derafu/backbone-dispatcher`](https://www.derafu.dev/docs/core/backbone-dispatcher), which is transport-agnostic — this package only deals with the HTTP-specific concerns: parsing the route, listing packages/components/workers as browsable resources, serving OpenAPI documentation, and extracting parameters from the request body.

## Installation

```bash
composer require derafu/backbone-api
```

There is no bundled route table or DI wiring — wiring `Dispatcher` and a controller into your framework's routes and container is left to your application.

## Requirements

PHP 8.5+. Depends on [`derafu/backbone`](https://www.derafu.dev/docs/core/backbone), [`derafu/backbone-dispatcher`](https://www.derafu.dev/docs/core/backbone-dispatcher), `psr/http-message`, and `psr/http-factory` (for building the real failure response — a concrete PSR-17 implementation, e.g. `nyholm/psr7`, is the consuming application's to provide).



---
Last updated on 10/10/2026

