Finished health action implementation

This commit is contained in:
Alejandro Celaya 2018-12-29 11:24:55 +01:00
parent 3f65ef998c
commit 0f86123ccb
4 changed files with 9 additions and 14 deletions

View file

@ -14,7 +14,6 @@ abstract class AbstractRestAction implements RequestHandlerInterface, RequestMet
{ {
protected const ROUTE_PATH = ''; protected const ROUTE_PATH = '';
protected const ROUTE_ALLOWED_METHODS = []; protected const ROUTE_ALLOWED_METHODS = [];
protected const ROUTE_CAN_BE_VERSIONED = true;
/** @var LoggerInterface */ /** @var LoggerInterface */
protected $logger; protected $logger;
@ -31,7 +30,6 @@ abstract class AbstractRestAction implements RequestHandlerInterface, RequestMet
'middleware' => array_merge($prevMiddleware, [static::class], $postMiddleware), 'middleware' => array_merge($prevMiddleware, [static::class], $postMiddleware),
'path' => static::ROUTE_PATH, 'path' => static::ROUTE_PATH,
'allowed_methods' => static::ROUTE_ALLOWED_METHODS, 'allowed_methods' => static::ROUTE_ALLOWED_METHODS,
'can_be_versioned' => static::ROUTE_CAN_BE_VERSIONED,
]; ];
} }
} }

View file

@ -13,10 +13,11 @@ use Zend\Diactoros\Response\JsonResponse;
class HealthAction extends AbstractRestAction class HealthAction extends AbstractRestAction
{ {
private const HEALTH_CONTENT_TYPE = 'application/health+json'; private const HEALTH_CONTENT_TYPE = 'application/health+json';
private const PASS_STATUS = 'pass';
private const FAIL_STATUS = 'fail';
protected const ROUTE_PATH = '/health'; protected const ROUTE_PATH = '/health';
protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET]; protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET];
protected const ROUTE_CAN_BE_VERSIONED = false;
/** @var AppOptions */ /** @var AppOptions */
private $options; private $options;
@ -41,7 +42,7 @@ class HealthAction extends AbstractRestAction
$statusCode = $connected ? self::STATUS_OK : self::STATUS_SERVICE_UNAVAILABLE; $statusCode = $connected ? self::STATUS_OK : self::STATUS_SERVICE_UNAVAILABLE;
return new JsonResponse([ return new JsonResponse([
'status' => $connected ? 'pass' : 'fail', 'status' => $connected ? self::PASS_STATUS : self::FAIL_STATUS,
'version' => $this->options->getVersion(), 'version' => $this->options->getVersion(),
'links' => [ 'links' => [
'about' => 'https://shlink.io', 'about' => 'https://shlink.io',

View file

@ -9,8 +9,7 @@ use function sprintf;
class ConfigProvider class ConfigProvider
{ {
private const ROUTES_PREFIX = '/rest'; private const ROUTES_PREFIX = '/rest/v{version:1}';
private const ROUTES_VERSION_PARAM = '/v{version:1}';
public function __invoke() public function __invoke()
{ {
@ -25,14 +24,8 @@ class ConfigProvider
// Prepend the routes prefix to every path // Prepend the routes prefix to every path
foreach ($routes as $key => $route) { foreach ($routes as $key => $route) {
['can_be_versioned' => $routeCanBeVersioned, 'path' => $path] = $route; ['path' => $path] = $route;
$routes[$key]['path'] = sprintf( $routes[$key]['path'] = sprintf('%s%s', self::ROUTES_PREFIX, $path);
'%s%s%s',
self::ROUTES_PREFIX,
$routeCanBeVersioned ? self::ROUTES_VERSION_PARAM : '',
$path
);
unset($routes[$key]['can_be_versioned']);
} }
return $config; return $config;

View file

@ -11,6 +11,9 @@ use function strpos;
class PathVersionMiddleware implements MiddlewareInterface class PathVersionMiddleware implements MiddlewareInterface
{ {
// TODO The /health endpoint needs this middleware in order to work without the version.
// Take it into account if this middleware is ever removed.
/** /**
* Process an incoming server request and return a response, optionally delegating * Process an incoming server request and return a response, optionally delegating
* to the next middleware component to create the response. * to the next middleware component to create the response.