Simple PHP Library for RESTful APIs


Packagist PHP Version GitHub Workflow Status Read the Docs

WellRESTed is a library for creating RESTful APIs and websites in PHP that provides abstraction for HTTP messages, a powerful handler and middleware system, and a flexible router.


  • Router allows you to match paths with variables such as /foo/{bar}/{baz}.
  • Middleware system provides a way to compose your application from discrete, modular components.
  • Lazy-loaded handlers and middleware don't instantiate unless they're needed.

Supports PSR Standards

  • PSR-7 interfaces for requests, responses, and streams
  • PSR-15 interfaces for handlers and middleware
  • PSR-11 interfaces dependency injection


Add an entry for "wellrested/wellrested" to your composer.json file's require property.

    "require": {
        "wellrested/wellrested": "^6"


See the documentation to get started.



use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use WellRESTed\Message\Response;
use WellRESTed\Message\Stream;
use WellRESTed\Server;

// Create a handler using the PSR-15 RequestHandlerInterface
class HomePageHandler implements RequestHandlerInterface
    public function handle(ServerRequestInterface $request): ResponseInterface
        // Create and return new Response object to return with status code,
        // headers, and body.
        $response = (new Response(200))
            ->withHeader('Content-type', 'text/html')
            ->withBody(new Stream('<h1>Hello, world!</h1>'));
        return $response;

// -----------------------------------------------------------------------------

// Create a new Server instance.
$server = new Server();
// Add a router to the server to map methods and endpoints to handlers.
$router = $server->createRouter();
// Register the route GET / with an anonymous function that provides a handler.
$router->register("GET", "/", function () { return new HomePageHandler(); });
// Add the router to the server.
// Read the request from the client, dispatch a handler, and output.


Use Docker to run unit tests, manage Composer dependencies, and render a preview of the documentation site.

To get started, run:

docker-compose build
docker-compose run --rm php composer install

To run PHPUnit tests, use the php service:

docker-compose run --rm php phpunit

To run Psalm for static analysis:

docker-compose run --rm php psalm

To run PHP Coding Standards Fixer:

docker-compose run --rm php php-cs-fixer fix

To generate documentation, use the docs service:

# Generate
docker-compose run --rm docs
# Clean
docker-compose run --rm docs make clean -C docs

To run a local playground site, use:

docker-compose up -d

The runs a site you can access at http://localhost:8080. You can use this site to browser the documentation or code coverage report.

Copyright and License

Copyright © 2024 by PJ Dietz Licensed under the MIT license