Stars: 651
Forks: 154
Pull Requests: 9
Issues: 27
Watchers: 76
Last Updated: 2021-06-02 05:15:14
:coffee: 🚀 tiny & fast PHP framework for building Microservices/RESTful APIs, with useful features: IOC, Hook, ORM, RPC, Swagger, Annotation, Parameters binding, Validation, etc.
License: MIT License
Languages: PHP
phprs-restful 2.x is renamed to PhpBoot, and incompatible with 1.x. You can get the old version from phprs-restful v1.x
PhpBoot is an easy and powerful PHP framework for building RESTful/Microservices APIs.
PhpBoot provides mainstream features, such as IOC, HOOK, ORM, Validation, etc. But the most striking features are:
WITHOUT PhpBoot:
class BookController
{
public function findBooks(Request $request)
{
$name = $request->get('name');
$offset = $request->get('offset', 0);
$limit = $request->get('limit', 10);
...
return new Response(['total'=>$total, 'data'=>$books]);
}
public function createBook(Request $request)
...
}
WITH PhpBoot:
/**
* @path /books/
*/
class Books
{
/**
* @route GET /
* @return Book[]
*/
public function findBooks($name, &$total=null, $offset=0, $limit=10)
{
$total = ...
...
return $books;
}
/**
* @route POST /
* @param Book $book {@bind request.request} bind $book with http body
* @return string id of created book
*/
public function createBook(Book $book)
{
$id = ...
return $id;
}
}
Read more: phpboot-example。
PhpBoot can automatically generate Swagger JSON,which can be rendered as document by Swagger UI like this:
Read more: Online Demo
Call the remote Books with RPC:
$books = $app->make(RpcProxy::class, [
'interface'=>Books::class,
'prefix'=>'http://x.x.x.x/'
]);
$books->findBooks(...);
Concurrent call RPC:
$res = MultiRpc::run([
function()use($service1){
return $service1->doSomething();
},
function()use($service2){
return $service2->doSomething();
},
]);
Read more: RPC
Install composer
curl -s http://getcomposer.org/installer | php
Install PhpBoot
composer require "caoym/phpboot"
index.php
<?php
require __DIR__.'/vendor/autoload.php';
$app = \PhpBoot\Application::createByDefault(__DIR__.'/config/config.php');
$app->loadRoutesFromPath(__DIR__.'/App/Controllers');
$app->dispatch();