gyselroth / micro-http
PHP HTTP routing
Installs: 1 402
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: >=7.1
- ext-xml: *
- psr/container: *
- psr/log: 1.*
Requires (Dev)
- friendsofphp/php-cs-fixer: *
- phpstan/phpstan: ^0.8.5
- phpunit/phpunit: 5.7.*
This package is not auto-updated.
Last update: 2024-10-29 14:11:01 UTC
README
Description
Requirements
The component is only >= PHP7.1 compatible.
Download
The package is available at packagist: https://packagist.org/packages/gyselroth/micro-http
To install the package via composer execute:
composer require gyselroth/micro-http
Documentation
Initialize router
The http router requires an array with http headers, usually this is $_SERVER and a PSR-3 compatible logger.
$router = new \Micro\Http\Router(\Psr\Log\LoggerInterface $logger, array $server, ?\Psr\Container\ContainerInterface);
Adding routes
$router = (new \Micro\Http\Router($logger)) ->clearRoutingTable() ->addRoute(new \Micro\Http\Router\Route('/api/v1/user', 'MyApp\Rest\v1\User')) ->addRoute(new \Micro\Http\Router\Route('/api/v1/user/{uid:#([0-9a-z]{24})#}', 'MyApp\Rest\v1\User')) ->addRoute(new \Micro\Http\Router\Route('/api/v1$', 'MyApp\Rest\v1\Rest')) ->addRoute(new \Micro\Http\Router\Route('/api/v1', 'MyApp\Rest\v1\Rest')) ->addRoute(new \Micro\Http\Router\Route('/api$', 'MyApp\Rest\v1\Rest')); ->run(array $controller_params);
The router tries to map a request to the first matching route in his routing table. The request gets mappend to a class and method. Optional parameters/query string gets automatically submitted to the final controller class.
Given the routing table above and the following final controller class:
namespace MyApp\Rest\v1; class User { /** * GET http://localhost/api/v1/user/540f1fc9a641e6eb708b4618/attributes * GET http://localhost/api/v1/user/attributes?uid=540f1fc9a641e6eb708b4618 */ public function getAttributes(string $uid=null): \Micro\Http\Response { } /** * GET http://localhost/api/v1/user/540f1fc9a641e6eb708b4618 * GET http://localhost/api/v1/user?uid=540f1fc9a641e6eb708b4618 */ public function get(string $uid=null): \Micro\Http\Response { } /** * POST http://localhost/api/v1/user/540f1fc9a641e6eb708b4618/password / POST body password=1234 * POST http://localhost/api/v1/user/password?uid=540f1fc9a641e6eb708b4618 / POST body password=1234 * POST http://localhost/api/v1/user/password / POST body password=1234, uid=540f1fc9a641e6eb708b4618 */ public function postPassword(string $uid, string $password): \Micro\Http\Response { } /** * DELETE http://localhost/api/v1/user/540f1fc9a641e6eb708b4618/mail * DELETE http://localhost/api/v1/user/mail?uid=540f1fc9a641e6eb708b4618 */ public function deleteMail(string $uid=null): \Micro\Http\Response { } /** * DELETE http://localhost/api/v1/540f1fc9a641e6eb708b4618/mail * DELETE http://localhost/api/v1/user?uid=540f1fc9a641e6eb708b4618 */ public function delete(string $uid=null): \Micro\Http\Response { } /** * HEAD http://localhost/api/v1/user/540f1fc9a641e6eb708b4618 * HEAD http://localhost/api/v1/user?uid=540f1fc9a641e6eb708b4618 */ public function headExists(string $uid=null): \Micro\Http\Response { } }
Response
Each endpoint needs to return a Response object to the router.
/** * HEAD http://localhost/api/v1/user/540f1fc9a641e6eb708b4618 * HEAD http://localhost/api/v1/user?uid=540f1fc9a641e6eb708b4618 */ public function headExists(string $uid=null): \Micro\Http\Response { if(true) { return (new \Micro\Http\Response())->setCode(200)->setBody('user does exists'); } else { return (new \Micro\Http\Response())->setCode(404); } }