Skip to content

REST API

Base classes for registering WordPress REST API endpoints in a structured way.

RouteController

Barberklingen\BasePlugin\REST\RouteController

Abstract base class. Implement getRestRouteSchemas() to declare endpoints:

use Barberklingen\BasePlugin\REST\RouteController;
use Barberklingen\BasePlugin\REST\RouteSchema;

class MyRestController extends RouteController {
    public function getRestRouteSchemas(): array {
        return [
            new RouteSchema(
                namespace: 'my-plugin/v1',
                path:      '/widgets',
                route_args: [
                    'methods'             => 'GET',
                    'callback'            => [$this, 'list_widgets'],
                    'permission_callback' => [$this, 'can_read'],
                ]
            ),
            new RouteSchema(
                namespace: 'my-plugin/v1',
                path:      '/widgets',
                route_args: [
                    'methods'             => 'POST',
                    'callback'            => [$this, 'create_widget'],
                    'permission_callback' => [$this, 'can_write'],
                ]
            ),
        ];
    }

    public function list_widgets(\WP_REST_Request $request): \WP_REST_Response {
        return new \WP_REST_Response(['widgets' => []], 200);
    }
}

Register the controller inside a rest_api_init callback:

add_action('rest_api_init', fn() => (new MyRestController())->registerRoutes());

Built-in permission callbacks

RouteController ships three permission helpers:

Method Checks
can_read() Manager settings read capability
can_write() Manager settings edit capability
can_delete() Manager settings delete capability

Override them or use your own permission_callback in the route args.

RestLoader

Barberklingen\BasePlugin\REST\RestLoader

Abstract loader class that wires up multiple controllers at once. Extend it to register a batch of controllers:

class MyRestLoader {
    use \Barberklingen\BasePlugin\Traits\Module;

    public function init(): void {
        add_action('rest_api_init', [$this, 'load']);
    }

    protected function controllers(): array {
        return [
            new MyWidgetController(),
            new MyProductController(),
        ];
    }
}

MyRestLoader::get_instance();

RouteSchema

Barberklingen\BasePlugin\REST\RouteSchema

A value object grouping namespace, path, and route_args for a single route. RouteController::registerRoutes() iterates the schemas and calls register_rest_route() for each.