The APIToolkit PHP Slim SDK designed to provide seamless integration with the APIToolkit service. This middleware captures and logs API requests and responses, redacting sensitive information as configured, and publishes the logs to Google Cloud Pub/Sub for further analysis.
To install the APIToolkit PHP Middleware, you can use Composer:
composer require apitoolkit/apitoolkit-slim
Create a new instance of the APIToolkitMiddleware class and register the middleware with Slim Framework, add it to the Slim app:
Example:
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apitoolkitMiddleware = new APIToolkitMiddleware("<API_KEY>");
$app->add($apitoolkitMiddleware);
$app->get('/', function ($request, $response) {
$response->getBody()->write('Hello, World!');
return $response;
});
$app->run();
The middleware supports several configuration options during initialization:
$redactHeaders
: An array of headers to redact in the logs.$redactRequestBody
: An array of JSON paths to redact in the request body.$redactResponseBody
: An array of JSON paths to redact in the response body.$debug
: Enable or disable debugging mode (default isfalse
).$serviceVersion
: Specify the service version in the logs.$tags
: An array of custom tags to include in the logs.
Sensitive information in headers, request bodies, and response bodies can be redacted using the specified configuration options. Redacted fields are replaced with [CLIENT_REDACTED]
.
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apitoolkitMiddleware = new APIToolkitMiddleware("<API_KEY>", redactHeaders = ["Authorization"], redactRequestBody = ["$.password"], redactResponseBody = ["$.password"]);
$app->add($apitoolkitMiddleware);
$app->get('/', function ($request, $response) {
$response->getBody()->write('Hello, World!');
return $response;
});
$app->run();
The APIToolkit-Slim
SDK facilitates the observation of outgoing requests within your application using Guzzle middleware. This feature allows you to monitor and track details about your API calls, aiding in debugging and performance analysis.
To observe outgoing requests, utilize the observeGuzzle
method of the APIToolkitSlim
class. Pass the Slim $request
object to this method, and it will configure Guzzle with monitoring capabilities.
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
use APIToolkit\APIToolkitSlim;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apitoolkitMiddleware = new APIToolkitMiddleware("<API_KEY>");
$app->add($apitoolkitMiddleware);
$app->get('/', function (Request $request, Response $response) {
$guzzleClient = APIToolkitSlim::observeGuzzle($request);
$responseFromGuzzle = $guzzleClient->request('GET', 'https://api.example.com/resource');
$response->getBody()->write($responseFromGuzzle->getBody()->getContents());
return $response;
});
$app->run();
If your requests include path parameters, specify a wildcard URL for the path. This ensures proper grouping on the APIToolkit dashboard.
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
use APIToolkit\APIToolkitSlim;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apitoolkitMiddleware = new APIToolkitMiddleware("<API_KEY>");
$app->add($apitoolkitMiddleware);
$app->get('/', function (Request $request, Response $response) {
$guzzleClient = APIToolkitSlim::observeGuzzle($request, ["pathPattern" => "/repos/{owner}/{repo}"]);
$responseFromGuzzle = $guzzleClient->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
$response->getBody()->write($responseFromGuzzle->getBody()->getContents());
return $response;
});
$app->run();
You can redact headers and fields in the request and response bodies using observeGuzzle
. Specify the headers and field keypaths you want to redact.
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
use APIToolkit\APIToolkitSlim;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apioolkitMiddleware = new APIToolkitMiddleware("<API_KEY>");
$app->add($apitoolkitMiddleware);
$app->get('/', function (Request $request, Response $response) {
$options = [
"pathPattern" => "/repos/{owner}/{repo}",
"redactHeaders" => ["Server"],
"redactRequestBody" => ["$.password"],
"redactResponseBody" => ["$.password"]
];
$guzzleClient = APIToolkitSlim::observeGuzzle($request, $options);
$responseFromGuzzle = $guzzleClient->request('GET', 'https://api.github.com/repos/guzzle/guzzle?foobar=123');
$response->getBody()->write($responseFromGuzzle->getBody()->getContents());
return $response;
});
$app->run();
APIToolkit can automatically detect API issues, but reporting errors manually provides additional details. To report errors, call the reportError
method of APIToolkitSlim
within the context of a web request.
use Slim\Factory\AppFactory;
use APIToolkit\APIToolkitMiddleware;
use APIToolkit\APIToolkitSlim;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$apitoolkitMiddleware = new APIToolkitMiddleware("<API_KEY>");
$app->add($apitoolkitMiddleware);
$app->get('/', function (Request $request, Response $response) {
try {
throw new Exception("Custom user error");
return $response;
} catch (Exception $e) {
// Report the error to APIToolkit
APIToolkitSlim::reportError($e, $request);
$response->getBody()->write($e->getMessage());
return $response;
}
});
$app->run();
You can report as many errors as you want for each request!
And that's it! Happy hacking.