REST API Endpoint

Let's create a REST API endpoint that retrieves details on a project. First, install the apex/rest-api by running the following install command:

apex install rest-api

Once installed, create an API endpoint with the following opus api-endpoint command:

apex opus api-endpoint Disaster/Api/Projects/Retrieve

Open the newly generated file at /src/Disaster/Api/Projects/Retrieve.php and replace it with the following contents:

declare(strict_types = 1);

namespace App\Disaster\Api\Projects;

use App\RestApi\Helpers\ApiRequest;
use App\RestApi\Models\{ApiResponse, ApiDoc, ApiParam, ApiReturnVar};
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use App\Disaster\Models\Project;

 * Retrieve API endpoint
Class Retrieve extends ApiRequest

     * The auth level required to access this endpoint.  
     * Supported values are:  public, user, admin
    public string $acl_required = 'public';

     * Retrive project details
    public function get(ServerRequestInterface $request, RequestHandlerInterface $app):ApiResponse

        // Check for project id
        if (!$project_id = $app->get('project_id')) {
            return new ApiResponse(400, [], "No project_id variable defined.");

        // Get project
        if (!$proj = Project::whereId($project_id)) {
            return new ApiResponse(404, [], "No project exists with the id# $project_id");

        // Gather response
        $res = $proj->toArray();
        $res['asignees'] = $proj->getAssignees();

        // Return
        return new ApiResponse(200, $res);


You will notice this class closely resembles ar PSR-15 Middleware class with two notable exceptions:

  • It returns an ApiResponse object instead of a PSR-7 compliant ResponseInterface object.
  • Same as Views it allows methods based on HTTP method (ie. get, post, put, delete, etc) instead of only a process() method.

When creating API endpoints, they can be accessed at<PACKAGE>/>ENDPOINT_ALIAS>. For example, once the above class is in place visit the URL within your web browser at:

Replace the value of project_id with any valid id# that's in your database. This will return a JSON response providing details on the project.

For further information on the REST API please consult the REST APIs Made Easy page of the documentation.