2017 © Pedro Peláez
 

library api-exceptions

Handle exceptions in Phalcon or other PHP APIs in a consistent way. Return consistent responses with proper response codes and have your errors and exceptions be logged into file on production.

image

igsem/api-exceptions

Handle exceptions in Phalcon or other PHP APIs in a consistent way. Return consistent responses with proper response codes and have your errors and exceptions be logged into file on production.

  • Sunday, April 23, 2017
  • by JuliusKoronci
  • Repository
  • 1 Watchers
  • 0 Stars
  • 63 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 5 % Grown

The README.md

Response generation, Exception handling and Logging for API's

Use with Phalcon, Lumen and any other PHP app suporting php 7+, (*1)

Your code:, (*2)

throw new TokenException('Token did not pass verification')

Your response:, (*3)

Status: 401 Unauthorized
{"message":"Invalid Tokenn","debug":{}}

Automatically catches all your errors and exceptions and returns a nice API friendly message. It provides a list of exceptions to use in your API, these resolve to standard HTTP STATUS CODES with a default message., (*4)

All exceptions which do not implement Igsem\ApiExceptions\Exceptions\ApiExceptionInterface return a 500 status code and log the message into a custom log file., (*5)

You can register your own exception, the only requirement is to implement ApiExceptionInterface., (*6)

You can customize every message and code plus send additional debug info for development env., (*7)

What it does

  • returns API friendly responses
  • provides an API for creating custom responses
  • logs all unexpected errors and exceptions
  • can send emails if unexpected exception or error occurs
  • provides additional debug info in development
  • hides all unexpected errors and exceptions in production
  • handles almost all non 200 responses which may occur in an API

Installation

In your front controller or when bootstrapping your application just register the handler:, (*8)

use Igsem\ApiExceptions\ApiExceptions;

$apiExceptions = new ApiExceptions($logger, ApiExceptions::DEVELOPMENT, $mySwiftmailer);
$apiExceptions->register();

The environment by default is set to production and no mailer is required. The library supports only swiftmailer., (*9)

The Logger is a little tricky one. As everyone implements their own logger usually and most of the time they are not PSR 3 compatible, therefore we decided to require our custom interface. You can pass in any Loger until it implements, (*10)

Igsem\ApiExceptions\LoggerInterface, (*11)

We are providing a Logger class for Phalcon by default., (*12)

This is an example of our logger creation:, (*13)

use Igsem\ApiExceptions\Loggers\PhalconLogger;

/**
 * Initializes the logger
 */
protected function initLogger()
{
    /** @var \Phalcon\Config $config */
    $config = $this->diContainer->getShared('config');
    $path = $config->get('logger')->toArray()['path'];

    $this->diContainer->setShared('logger', new PhalconLogger($path));
}

It only requires a path to the log folder. There are only 3 methods available:, (*14)

  • logError
  • logException
  • logMessage

The logger will create separate files with debug info, proper formats and info required for debugging., (*15)

You can still use your logger and just extend it with logError and logException just to let the library know how to handle these cases., (*16)

!If you decide to use the library, please remove the try catch block around your application. The library registers its own error and exception handlers., (*17)

Custom exception example

<?php

namespace Igsem\ApiExceptions\Exceptions;


/**
 * Created by PhpStorm.
 * User: juliuskoronci
 * Date: 23/04/2017
 * Time: 11:54
 */
class InvalidParametersException extends \Exception implements ApiExceptionInterface
{
    /** @var array - used to pass additional info for dev env */
    private $debug;

    /**
     * TokenException constructor.
     * @param string $message
     * @param int $code
     * @param \Throwable|null $previous
     * @param array $debug
     */
    public function __construct(
        $message = StatusCodes::INVALID_PARAMETERS_MESSAGE,
        $code = StatusCodes::INVALID_PARAMETERS_CODE,
        \Throwable $previous = null,
        $debug = []
    )
    {
        /**
         * Set Default if null provided because of debug
         */
        $message = $message??StatusCodes::INVALID_PARAMETERS_MESSAGE;
        $code = $code??StatusCodes::INVALID_PARAMETERS_CODE;

        parent::__construct($message, $code, $previous);
        $this->debug = $debug;
    }

    /**
     * @return array
     */
    public function getDebug(): array
    {
        return $this->debug;
    }

    /**
     * @param array $debug
     */
    public function setDebug(array $debug = [])
    {
        $this->debug = $debug;
    }
}

In the same way, you can create your own custom exceptions. If they implement ApiExceptionInterface, they will be caught and the correct response will be returned., (*18)

List of available exceptions

  • AccessDeniedException
  • BadRequestException
  • InvalidCredentialException
  • InvalidParametersException
  • NotFoundException
  • TokenException
  • UnAuthorizedException

The Versions

23/04 2017

dev-master

9999999-dev

Handle exceptions in Phalcon or other PHP APIs in a consistent way. Return consistent responses with proper response codes and have your errors and exceptions be logged into file on production.

  Sources   Download

MIT

by Julius Koronci

23/04 2017

0.0.1

0.0.1.0

Handle exceptions in Phalcon or other PHP APIs in a consistent way. Return consistent responses with proper response codes and have your errors and exceptions be logged into file on production.

  Sources   Download

MIT

by Julius Koronci