2017 © Pedro Peláez
 

library api-problems

PSR7 Response implementation for the Problem Details for HTTP APIs

image

nilportugues/api-problems

PSR7 Response implementation for the Problem Details for HTTP APIs

  • Saturday, July 23, 2016
  • by nilportugues
  • Repository
  • 1 Watchers
  • 11 Stars
  • 6,271 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 4 Forks
  • 0 Open issues
  • 7 Versions
  • 11 % Grown

The README.md

PSR7 HTTP APIs Problem Response

Build Status Scrutinizer Code Quality SensioLabsInsight Latest Stable Version Total Downloads License Donate, (*1)

PSR7 Response implementation for the Problem Details for HTTP APIs (RFC7807) specification., (*2)

Usage

To report a single error, all you need to do is pass in the mandatory parameters and you'll be fine., (*3)

Straightforward usage (recommended), (*4)

This is probably the fastest way and it's really convenient as it hides the presenter and creating the instances from you., (*5)

use NilPortugues\Api\Problem\ApiProblemResponse;

$additionalDetails = []; //you may pass additional details too.

/**@var $response is a PSR7 response */
$response = ApiProblemResponse::json(404,'User with id 5 not found.', 'Not Found', 'user.not_found', $additionalDetails);
$response = ApiProblemResponse::xml(404,'User with id 5 not found.', 'Not Found', 'user.not_found', $additionalDetails);

$response = ApiProblemResponse::fromExceptionToJson($exception);
$response = ApiProblemResponse::fromExceptionToXml($exception);

Using the constructor and handling the response yourself., (*6)

use NilPortugues\Api\Problem\ApiProblem;
use NilPortugues\Api\Problem\ApiProblemResponse;
use NilPortugues\Api\Problem\Presenter\JsonPresenter;

$apiProblem = new ApiProblem(
    404,
    'User with id 5 not found.',
    'Not Found', 
    'user.not_found'
); 

$presenter = new JsonPresenter($apiProblem); //or XmlPresenter
return new ApiProblemResponse($presenter);  

Using an Exception and handling the response yourself., (*7)

use NilPortugues\Api\Problem\ApiProblem;
use NilPortugues\Api\Problem\ApiProblemResponse;
use NilPortugues\Api\Problem\Presenter\JsonPresenter;

try {
    //...your code throwing an exception
    throw new \Exception('User with id 5 not found.', 404);   

} catch(\Exception $exception) {

    $problem = ApiProblem::fromException($exception);
    $presenter = new JsonPresenter($apiProblem); //or XmlPresenter
    return new ApiProblemResponse($presenter);        
}

Multiple Problems, one object

In order to report more than problem, you must use the additional details parameter., (*8)

use NilPortugues\Api\Problem\ApiProblem;
use NilPortugues\Api\Problem\ApiProblemResponse;
use NilPortugues\Api\Problem\Presenter\JsonPresenter;

try {
    // some code of yours throws an exception... for instance:
    throw new \Exception('User data is not valid.', 500);

} catch(\Exception $exception) {

    $additionalDetails = [
        'errors' => [
            ['name' => 'username', 'error' => 'Username must be at least 5 characters long.'],
            ['name' => 'email', 'error' => 'Provided address is not a valid email.'],
        ],
    ]

    $apiProblem = ApiProblem::fromException(
        $exception,
        'Input values do not match the requirements',
        'user.invalid_data',
        $additionalDetails;
    ); 

    $presenter = new JsonPresenter($apiProblem); //or XmlPresenter

    return new ApiProblemResponse($presenter);
}

JSON Output

Headers, (*9)

HTTP/1.1 500 Bad Request
Content-Type: application/problem+json

Body, (*10)

{    
    "title": "Input values do not match the requirements",
    "status": 500,
    "detail": "User data is not valid.",
    "type": "user.invalid_data",
    "errors": [
        {
            "name": "username",
            "error": "Username must be at least 5 characters long."
        },
        {
            "name": "email",
            "error": "Provided address is not a valid email."
        }        
    ]
}

XML Output

Headers, (*11)

HTTP/1.1 500 Bad Request
Content-Type: application/problem+xml

Body, (*12)

<?xml version="1.0" encoding="UTF-8"?>
<problem xmlns="urn:ietf:rfc:7807">  
  <title>Input values do not match the requirements</title>
  <status>500</status>
  <detail>User data is not valid.</detail>
  <type>user.invalid_data</type>
  <errors>
    <item>
      <name>username</name>
      <error>Username must be at least 5 characters long.</error>
    </item>
    <item>
      <name>email</name>
      <error>Provided address is not a valid email.</error>
    </item>    
  </errors>
</problem>

Contribute

Contributions to the package are always welcome!, (*13)

Support

Get in touch with me using one of the following means:, (*14)

Authors

License

The code base is licensed under the MIT license., (*15)

The Versions

23/07 2016

dev-master

9999999-dev http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

23/07 2016

1.2.3

1.2.3.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

21/06 2016

1.2.2

1.2.2.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

17/06 2016

1.2.1

1.2.1.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

03/06 2016

1.2.0

1.2.0.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

22/04 2016

1.1.0

1.1.0.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer

10/03 2016

1.0.0

1.0.0.0 http://nilportugues.com

PSR7 Response implementation for the Problem Details for HTTP APIs

  Sources   Download

MIT

The Requires

 

The Development Requires

api json xml psr7 response transformer