PhpBoot 是为快速开发RESTfulAPI设计的PHP框架。它可以帮助开发者更聚焦在业务本身,而将原来开发中不得不做,但又重复枯燥的事情丢给框架,比如编写接口文档、参数校验和远程调用代码等。
特色PhpBoot框架提供许多主流的特性,如ORM、依赖注入等。这些特性都经过精心设计和选择(有些是第三方开源代码,如PHP-DI),但和其他框架相比较,PhpBoot最显著的特色是:
1.以面向对象的方式编写接口
你肯定看到过这样的代码:
// **不用** 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) ...}很多主流框架都需要用类似代码编写接口。但这种代码的一个问题是,方法的输入输出隐藏在实现里,这不是通常我们提倡的编码方式。如果你对代码要求更高,你可能还会实现一层Service接口,而在Controller里只是简单的去调用Service接口。而使用PhpBoot,你可以用更自然的方式去定义和实现接口。上面的例子,在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; }}上面两份代码执行的效果是一样的。可以看到PhpBoot编写的代码更符合面向对象编程的原则,以上代码完整版本请见phpboot-example。
2.轻松支持Swagger
Swagger是目前最流行的接口文档框架。虽然很多框架都可以通过扩展支持Swagger,但一般不是需要编写很多额外的注释,就是只能导出基本的路由信息,而不能导出详细的输入输出参数。而PhpBoot可以在不增加额外编码负担的情况下,轻松去完成上述任务,下图为findBooks对应的文档。更多内容请见文档和在线Demo。
3.简单易用的分布式支持
使用PhpBoot可以很简单的构建分布式应用。通过如下代码,即可轻松远程访问上面示例中的Books接口:
$books = $app->make(RpcProxy::class, [ 'interface'=>Books::class, 'prefix'=>'https://x.x.x.x/' ]); $books->findBooks(...);同时还可以方便的发起并发请求,如:
$res = MultiRpc::run([ function()use($service1){ return $service1->doSomething(); }, function()use($service2){ return $service2->doSomething(); },]);更多内容请查看文档
4.IDE友好
IDE的代码提示功能可以让开发者轻松不少,但很多框架在这方面做的并不好,你必须看文档或者代码,才能知道某个功能的用法。PhpBoot在一开始就非常注重框架的IDE友好性,尽可能让框架保持准确的代码提示。比如下图是DB库在PhpStorm下的使用:
主要特性基于Annotation的路由定义
接口参数双向绑定
Validation
依赖注入
DB
ORM
自动文档和接口工具
分布式支持(RPC)
Hook
工作流引擎(开发中...)
安装和配置1.安装composer(已安装可忽略)
curl -s https://getcomposer.org/installer | php2.安装PhpBoot
composer require "caoym/phpboot"3.index.php加载PhpBoot
<?phprequire __DIR__.'/vendor/autoload.php';$app = \PhpBoot\Application::createByDefault(__DIR__.'/config/config.php');$app->loadRoutesFromPath(__DIR__.'/App/Controllers');$app->dispatch();帮助和文档在线文档
本人邮箱 caoyangmin@gmail.com
评论