Hazaar\Controller
REST
Abstract
The RESTful controller class

This controller can be used to create RESTful API endpoints. It automatically handles HTTP request methods and can send appropriate responses for invalid requests. It can also provide an intelligent API endpoint directory.

Overview

Unlike other controllers, the rest controller works using annotations. Such as:

class ApiController extends \Hazaar\Controller\REST {

/**
 * @route('/dothething/<int:thingstodo>', methods=['GET'])
 **\/
protected function do_the_thing($thingstodo){

    return array('things' => 'Array of things');

}

}

This API will be accessible at the URL: http://yourhost.com/api/v1/dothething/1234

Versions

It is possible to add your own "version control" to the REST api by defining multiple functions for the same route. Using versions allows you to easily update your API without removing backwards compatibility. New versions should be used when there is a major change to either the input or output of your endpoint and renaming it is not reasonable.

Do define another version of the above example using versions you could:

class ApiController extends \Hazaar\Controller\REST {

/**
 * @route('/v1/dothething/<int:thingstodo>', methods=['GET'])
 **\/
protected function do_the_thing($thingstodo){

    return array('things' => 'Array of things');

}

/**
 * @route('/v2/dothething/<date:when>/<int:thingstodo>', methods=['GET'])
 **\/
protected function do_the_thing_v2($thingstodo, $when){

    if($when->year() >= 2023)
        return array('things' => 'Array of FUTURE things');

    return array('things' => 'Array of things');

}

}

This API will be accessible at the URL: http://yourhost.com/api/v1/dothething/2040-01-01/1234

Endpoints on multiple versions

To allow an endpoint to be available on multiple versions of your API, simply add multple @routes

Such as:

/**

  • @route('/v1/dothething/<date:when>/<int:thingstodo>', methodsGET'])
  • @route('/v2/dothething/<date:when>/<int:thingstodo>', methods=['GET']) **\/

Endpoint Directories

Endpoint directories are simply a list of the available endpoints with some basic information about how they operate such as the HTTP methods allowed, parameter description and a brief description.

Summary
MethodsPropertiesConstants
No constants
Properties
$__endpoint
$__endpoint
$__rest_cache
$__rest_cache
$__rest_cache_enable_global
$__rest_cache_enable_global
$__rest_endpoints
$__rest_endpoints
$allow_directory
$allow_directory
$describe_full
$describe_full
Static
$valid_types
$valid_types
Methods
__construct()
__construct($name, $application, $use_app_config = true)
__describe_api()
__describe_api()
__describe_endpoint()
__describe_endpoint($endpoint, $describe_full = false, $api = null)
__exec_endpoint()
__exec_endpoint($endpoint)
__initialize()
__initialize($request)
__match_route()
__match_route($path, $route, $endpoint, $args = null)
__run()
__run()
enableEndpointCaching()
enableEndpointCaching($boolean)
getEndpointTags()
getEndpointTags($name)
getRequestedEndpoint()
getRequestedEndpoint()