maatify / api-response
Slim-compatible JSON API response handler for validation, errors, and success messages.
Requires
- php: >=8.2.0
- maatify/slim-logger: ^1.0
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: ^10
- slim/psr7: ^1.7
README
Maatify API Response is a lightweight, PSR-7 compatible, Slim-friendly structured JSON response library for clean and consistent API responses. Built with production logging in mind via maatify/slim-logger. It is part of the modular Maatify.dev ecosystem.
๐ Features
- โ
PSR-7 compatible (
ResponseInterface
) - โ
Slim-ready (
return Json::...
) - โ Structured error responses (missing, invalid, etc.)
- โ Success responses with metadata
- โ
Automatic route+line trace:
user:login::55
- โ Production-safe JSON POST logging via maatify/slim-logger
- โ Environment toggles for logging
- โ
Optional
JsonResponseEmitter
for non-framework use
๐ Installation
composer require maatify/api-response
Requires PHP 8.1+
Usesmaatify/slim-logger
under the hood for logging (installed automatically)
๐ฆ Usage in Slim
use Maatify\ApiResponse\Json; $app->post('/register', function ($request, $response) { return Json::missing($response, 'email'); });
๐ก Usage in Pure PHP (no framework)
Use the built-in JsonResponseEmitter
class to send PSR-7 responses directly in native PHP.
require 'vendor/autoload.php'; use Maatify\ApiResponse\Json; use Maatify\ApiResponse\JsonResponseEmitter; use Nyholm\Psr7\Response; $response = new Response(); if (empty($_POST['email'])) { $response = Json::missing($response, 'email', 'Email is required', __LINE__); } JsonResponseEmitter::emit($response);
๐ Output
HTTP/1.1 400 Bad Request Content-Type: application/json
{ "success": false, "response": 1000, "var": "email", "description": "MISSING Email", "more_info": "Email is required", "error_details": "index::15" }
โจ Example Slim Response
{ "success": false, "response": 1000, "var": "email", "description": "MISSING Email", "more_info": "", "error_details": "register::34" }
โ Supported Methods
Method | Description |
---|---|
missing() |
Field missing from input |
incorrect() |
Incorrect format or value |
invalid() |
Invalid input |
notExist() |
Value doesn't exist (e.g. user ID) |
success() |
Standard success output |
dbError() |
Internal DB/system error |
tooManyAttempts() |
Rate limit exceeded |
๐ HTTP Status Code Reference
Method | Status |
---|---|
missing() |
400 |
incorrect() |
400 |
invalid() |
400 |
notExist() |
400 |
success() |
200 |
dbError() |
500 |
tooManyAttempts() |
429 |
๐ Secure Logging
Enable structured logging in production via maatify/slim-logger
1. Enable in your .env
JSON_POST_LOG=1
2. Sample Logged Output
{ "response": { "success": false, "response": 1000 }, "posted_data": { "email": "user@test.com", "password": "******" } }
Log file: logs/api/response.log
Log level: Info
๐ Directory Structure
src/
โโโ CoreResponder.php # Base logic + logger
โโโ BaseResponder.php # Validation & error helpers
โโโ Json.php # Final static entrypoint class
โโโ JsonResponseEmitter.php # Sends PSR-7 responses in native PHP
๐งฉ Extend It
Want custom codes or more logic?
- Extend
BaseResponder
orCoreResponder
- Override any method (e.g. add audit log or rate limiter)
- Customize
logResponse()
for deeper monitoring
๐งช Testing
โ Run Tests
composer test
โ Run One Test
composer test -- --filter testSuccessResponse
โ CI (GitHub Actions)
Tested on PHP 8.2, 8.3, and 8.4 using run-tests.yml
๐ Slim vs Pure PHP Comparison
Feature | Slim | Pure PHP |
---|---|---|
Routing | $app->post(... |
Native index.php or custom |
JSON Response | return Json::success(...) |
$response = Json::success(...) |
Headers/Status | Handled by Slim | You manually set headers + status |
Logging | Via maatify/slim-logger | โ Works the same |
๐ License
MIT License ยฉ 2025 Maatify.dev
๐โโ๏ธ Questions or Feedback?
- Open an issue on GitHub