PHPackages                             pinkeen/api-debug-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. pinkeen/api-debug-bundle

ActiveSymfony-bundle[HTTP &amp; Networking](/categories/http)

pinkeen/api-debug-bundle
========================

Allows easy API consumer debugging with web debug toolbar extension.

v3.0.0(7y ago)17021[2 issues](https://github.com/pinkeen/ApiDebugBundle/issues)MITPHPPHP &gt;=5.5.9

Since Apr 11Pushed 7y ago1 watchersCompare

[ Source](https://github.com/pinkeen/ApiDebugBundle)[ Packagist](https://packagist.org/packages/pinkeen/api-debug-bundle)[ RSS](/packages/pinkeen-api-debug-bundle/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (4)Versions (12)Used By (0)

ApiDebugBundle
==============

[](#apidebugbundle)

[![ApiDebugBundle in action](Resources/doc/meta/images/apidebug.png)](Resources/doc/meta/images/apidebug.png)

This bundle adds a web debug toolbar tab which displays information about API consumer requests.

It aims to be universal and allow for easy integration with SDKs and HTTP client libraries.

Currently it supports [Guzzle 6](https://github.com/guzzle/guzzle) out-of-the box.

It should be extremely easy to integrate with any http client using PSR-7 messages.

For `Guzzle4`-compatible version use the `v1.0` tag.

For `Symfony < 3.3`-compatible version use the `v2.0` tag.

Requirements
------------

[](#requirements)

- PHP 5.5.9
- Symfony 3.3

Installation
------------

[](#installation)

The usual [Symfony stuff](http://symfony.com/doc/current/cookbook/bundles/installation.html).

The **composer.json** needs: `"pinkeen/api-debug-bundle": "dev-master",`.

The **AppKernel.php** needs: `new Pinkeen\ApiDebugBundle\PinkeenApiDebugBundle(),`.

Add the following to your `app/config/routing_dev.yml` if you want to be able to view raw body data:

```
_api_debug:
    resource: "@PinkeenApiDebugBundle/Resources/config/routing.yml"
    prefix:   /_profiler
```

Services
--------

[](#services)

### New symfony approach

[](#new-symfony-approach)

All services expect GuzzleClientFactory and RingPHPHandlerFactory are private, which means you cannot fetch services directly from the container via $container-&gt;get().

They are also automatically registered and set to autowire, all you need to do add type-hinted service to your class as an argument of contructor.

```
// src/AppBundle/Service/FooService.php
// ...

use Pinkeen\ApiDebugBundle\Bridge\Guzzle\Middleware\DataCollectorMiddleware;

class FooService
{
    private $dataCollectorMiddleware;

    public function __construct(DataCollectorMiddleware $dataCollectorMiddleware)
    {
        $this->dataCollectorMiddleware = $dataCollectorMiddleware;
    }

    // ...
}
```

Usage
-----

[](#usage)

### Integrate with your custom client

[](#integrate-with-your-custom-client)

Firstly you have to subclass [`AbstractCallData`](DataCollector/AbstractCallData.php)which holds data from a single API request.

If you are using a PSR-7 comptible client then you can use [`PsrCallData`](DataCollector%5CData%5CPsrCallData.php)instead of writing your own data class.

Then every time your API consumer makes a request dispatch an [`ApiEvents::API_CALL`](ApiEvents.php) event.

```
    use Pinkeen\ApiDebugBundle\ApiEvents;
    use Pinkeen\ApiDebugBundle\Event\ApiCallEvent;

    /* ... */
    /** @var $eventDispatcher \Symfony\Component\EventDispatcher\EventDispatcher */
    $eventDispatcher->dispatch(
        ApiEvents::API_CALL,
        new ApiCallEvent(
            new YourApiCallData(/* your params */)
        )
    );
```

### Guzzle

[](#guzzle)

You've got two options here, either:

*Let the bundle create the client for you...*

```
    /** @var $guzzleClientFactory \Pinkeen\ApiDebugBundle\Bridge\Guzzle\Service\GuzzleClientFactory */
    $guzzleClientFactory->create([
        /* Guzzle client config (optional).
         * It is passed directly to GuzzleHttp\Client constructor. */
    ]);
```

*... or push the collector handler to your middleware stack.*

```
    $handler = new GuzzleHttp\HandlerStack(new GuzzleHttp\Handler\CurlHandler());
    /** @var $dataCollectorMiddleware \Pinkeen\ApiDebugBundle\Bridge\Guzzle\Middleware\DataCollectorMiddleware */
    $dataCollectorMiddlewareHandler = $dataCollectorMiddleware->getHandler();
    $handler->push($dataCollectorMiddlewareHandler);
    $client = new GuzzleHttp\Client(['handler' => $handler]);
```

### RingPHP

[](#ringphp)

*Let the bundle create the handler for you:*

```
    /** @var $ringPHPHandlerFactory \Pinkeen\ApiDebugBundle\Bridge\RingPHP\Service\RingPHPHandlerFactory */
    $handler = $ringPHPHandlerFactory->create(new CurlHandler());
```

*Use the collector\_middleware service to create your RingPHP middleware and wrap it around your base handler:*

```
    /** @var $dataCollectorMiddleware \Pinkeen\ApiDebugBundle\Bridge\RingPHP\Middleware\DataCollectorMiddleware */
    $ringPhpHandler = $dataCollectorMiddleware->createHandler(new GuzzleHttp\Ring\Client\CurlHandler(), 'apiname');
```

PS Nicely integrates with elasticsearch-php 2.0.

Production
----------

[](#production)

For production environment you probably want to skip all of the data gathering.

You should take care of that yourself, unless you're using `Pinkeen\ApiDebugBundle\Bridge\Guzzle\Service\GuzzleClientFactory` or `Pinkeen\ApiDebugBundle\Bridge\RingPHP\Service\RingPHPHandlerFactory` which skip it when not in debug mode.

Notes
-----

[](#notes)

I haven't found an easy way to get call duration out of guzzle6, so there's a regression here. If anybody has an idea please give me a shout.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity16

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~157 days

Recently: every ~216 days

Total

10

Last Release

2632d ago

Major Versions

v1.0 → v2.02015-06-28

v2.3.3 → v3.0.02019-03-01

PHP version history (2 changes)v1.0PHP &gt;=5.4

v3.0.0PHP &gt;=5.5.9

### Community

Maintainers

![](https://www.gravatar.com/avatar/852691f2c0476ae46e9bc0751fb11a6bf27092e34f5e35e2a70e2d003787670c?d=identicon)[pinkeen](/maintainers/pinkeen)

---

Top Contributors

[![pinkeen](https://avatars.githubusercontent.com/u/2019132?v=4)](https://github.com/pinkeen "pinkeen (32 commits)")

---

Tags

apisymfonybundledebugtoolbarGuzzle

### Embed Badge

![Health badge](/badges/pinkeen-api-debug-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/pinkeen-api-debug-bundle/health.svg)](https://phpackages.com/packages/pinkeen-api-debug-bundle)
```

###  Alternatives

[eightpoints/guzzle-bundle

Integrates Guzzle 6.x, a PHP HTTP Client, into Symfony. Comes with easy and powerful configuration options and optional plugins.

45912.1M55](/packages/eightpoints-guzzle-bundle)[e-moe/guzzle6-bundle

Integrates Guzzle 6 into your Symfony application

11259.2k](/packages/e-moe-guzzle6-bundle)[mediamonks/rest-api-bundle

MediaMonks Rest API Symfony Bundle

1656.2k1](/packages/mediamonks-rest-api-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
