Download the PHP package fishyboat21/simple-api without Composer
On this page you can find all versions of the php package fishyboat21/simple-api. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download fishyboat21/simple-api
More information about fishyboat21/simple-api
Files in fishyboat21/simple-api
Package simple-api
Short Description A minimal PHP 8.4+ library for building JSON HTTP APIs with per-file routing
License MIT
Informations about the package simple-api
SimpleAPI
A minimal, zero-dependency PHP 8.4+ library for building JSON HTTP APIs using a file-per-endpoint pattern. Each endpoint is a single PHP file in public/api/ — no complex routing, no route cache, no code generation. Just create a file and it's live.
Requirements
- PHP >= 8.4
- Composer
Installation
Quick Start
1. Create your first endpoint
public/api/health.php
2. Start the server
3. Test it
Clean URLs
Enable clean URLs without the .php extension by placing this .htaccess in your public/ directory:
With the rewrite rule:
Creating Endpoints
Single-method endpoint
Multi-method endpoint
Register multiple HTTP method handlers on the same file:
Supported methods: get(), post(), put(), delete(), patch().
Request Handling
The Request object provides access to every part of the incoming request:
Response Helpers
JSON response format
CORS Configuration
CORS is configurable per-endpoint or globally with safe defaults (allow all origins, common methods).
Note: Using
allowedOrigins: ['*']together withallowCredentials: truewill throw aRuntimeException— the CORS spec forbids this combination.
Error Handling & Logging
Error responses
| Condition | Status | Body |
|---|---|---|
| Method not allowed | 405 | {"status":405,"message":"Method Not Allowed"} + Allow header |
| Unhandled exception | 500 | {"status":500,"message":"Internal Server Error"} |
Custom HttpException |
varies | Status from exception, safe message exposed |
Security: Unhandled exceptions return a generic
"Internal Server Error"message. The real error is logged server-side, never exposed to the client.
Attaching a logger
Custom HTTP exceptions in handlers
Create your own exception types:
Complete Example
public/api/task.php
Performance
- No routing overhead — each endpoint file is served directly by the web server
- No route cache — nothing to generate or load
- Lazy request body parsing —
php://inputis read only if the handler callsbody()orbodyData() - No middleware stack — fixed pipeline: CORS → dispatch → send
License
MIT