hrishikesh214 / php-api
Helps easily build RESTFul Api in PHP
Installs: 25
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/hrishikesh214/php-api
README
Easily create RESTFull API in PHP
It supports only JSON but you can change output :-)
Index
- Installation
- Documentation
- Creating Endpoint
- Passing URL Parameters
- Post Parameters
- API Tracer
- Setting Error Handlers
- External Routes
Installation
composer require hrishikesh214/php-api
And then in your file
require 'vendor/autoload.php';
Configurations
Before getting into PHPAPI we have to make some configs
In your root directory, create .htaccess file and paste following code
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?URL=$1 [L]
Documentation
Creating a client
$client = new phpapi\Client();
You can also pass base address
$client = new phpapi\Client("api/");
All child endpoints will be access after api/
Running Client
print_r($client->run(isset($_GET['URL']) ? $_GET['URL'] : ""));
This $client->run() returns response string, so you can store it in variable for further process or directly print it as response
Creating an Endpoint
$client->mount('GET', 'token', function(){ //some calculations return $token; });
Only some request methods are allowed : 'PUT', 'POST', 'DELETE', 'PATCH', 'GET', 'PURGE'
mount returns boolean value about whether endpoint is mounted successfully or not
Passing URL Parameters
Client will automatically pass url parameters to the response function
example is given below
$client->mount('GET', 'wish/:name/:age', function($props){ return "Hi $props['name'], you are $props['age] years old!"; });
URI Parameters are directly passed to the responder function in an associative array according to the key passed in parameter
All other posted parameters will automatically get stored in $_POST
NOTE If parameter is define while mounting but not passes then it is given a null value
POST Endpoint
$respond = function(){ return $_POST; //It will have all posted data! }; $client->mount("POST", 'checkpost', $respond);
Trace Whole API
You can trace whole API Client with detailed configs of all endpoints mounted with a function
$client->trace(true|false);
If Above value is true final api result will also included api configs
This Also includes Requested configs
Example output:-
{
"track": {
"routes": {
"POST": {
"api/wish": {
"base": "api/wish",
"type": "POST",
"params": [ ]
},
"name": {
"base": "name",
"type": "POST",
"params": [ ]
}
},
"GET": {
"api/msg": {
"base": "api/msg",
"type": "GET",
"params": [ ]
},
"api/wish": {
"base": "api/wish",
"type": "GET",
"params": {
"name": 3
}
},
"name": {
"base": "name",
"type": "GET",
"params": {
"name": 3
}
},
"/": {
"base": "/",
"type": "GET",
"params": [ ]
}
}
},
"base": "",
"request_blocks": [
"api",
"msg"
],
"request_uri": "api/msg",
"request_type": "GET"
},
"result": "trial"
}
In above example result will contain result coming from API
Setting Request Errors
There is a default error handler but you change it!
404
$client->set404([ 'error_type' => 404, 'error_msg' => "Not Found" ]);
405
$client->set405([ 'error_type' => 405, 'error_msg' => "Method Not Allowed" ]);
External Routes
Importing Routes from external file
You can also define routes in external file all you need is to use Helper Class.
For example (folder structure):-
| myRoutes
| - api.php
| vendor (composer files)
| index.php
//index.php $client = new phpapi\Client(); $helper = new phpapi\Helper($client); $helper->use('myRoutes/api.php' [, basename: 'api']);
// myRoutes/api.php // You can define functions and also pass to callback $myFunc = function($props){ return "Good morning {$props['name']}"; }; $routes = [ [ "match" => 'msg', "type" => "get", "callback" => function(){ return "trial"; } ], [ "match" => 'wish/:name', "type" => "get", "callback" => $myFunc ], [ "match" => 'wish', "type" => "post", "callback" => function(){ return "Good morning {$_POST['name']}"; } ] ]; $config = [ 'base' => 'api' ];
In above code $config['base']' will be act as base to all routes present in this file.
$routes will contain all routes.
Please maintain format else code will not work!