PhpBoot快速開(kāi)發(fā) RESTful 接口的框架
PhpBoot
PhpBoot 是為快速開(kāi)發(fā) RESTful API 設(shè)計(jì)的 PHP 框架。它可以幫助開(kāi)發(fā)者更聚焦在業(yè)務(wù)本身,而將原來(lái)開(kāi)發(fā)中不得不做,但又重復(fù)枯燥的事情丟給框架,比如編寫接口文檔、參數(shù)校驗(yàn)和遠(yuǎn)程調(diào)用代碼等。
特色
PhpBoot 框架提供許多主流的特性,如 ORM、依賴注入等。這些特性都經(jīng)過(guò)精心設(shè)計(jì)和選擇(有些是第三方開(kāi)源代碼,如 PHP-DI),但和其他框架相比較,PhpBoot 最顯著的特色是:
1. 以面向?qū)ο蟮姆绞骄帉懡涌?/strong>
你肯定看到過(guò)這樣的代碼:
// **不用** 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)
...
}
很多主流框架都需要用類似代碼編寫接口。但這種代碼的一個(gè)問(wèn)題是,方法的輸入輸出隱藏在實(shí)現(xiàn)里,這不是通常我們提倡的編碼方式。如果你對(duì)代碼要求更高,你可能還會(huì)實(shí)現(xiàn)一層 Service 接口,而在 Controller 里只是簡(jiǎn)單的去調(diào)用 Service 接口。而使用 PhpBoot,你可以用更自然的方式去定義和實(shí)現(xiàn)接口。上面的例子, 在 PhpBoot 框架中實(shí)現(xiàn)是這樣的:
/**
* @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;
}
}
上面兩份代碼執(zhí)行的效果是一樣的。可以看到 PhpBoot 編寫的代碼更符合面向?qū)ο缶幊痰脑瓌t,以上代碼完整版本請(qǐng)見(jiàn)phpboot-example。
2. 輕松支持 Swagger
Swagger 是目前最流行的接口文檔框架。雖然很多框架都可以通過(guò)擴(kuò)展支持Swagger,但一般不是需要編寫很多額外的注釋,就是只能導(dǎo)出基本的路由信息,而不能導(dǎo)出詳細(xì)的輸入輸出參數(shù)。而 PhpBoot 可以在不增加額外編碼負(fù)擔(dān)的情況下,輕松去完成上述任務(wù),下圖為 findBooks 對(duì)應(yīng)的文檔。更多內(nèi)容請(qǐng)見(jiàn)文檔和在線 Demo。
3. 簡(jiǎn)單易用的分布式支持
使用 PhpBoot 可以很簡(jiǎn)單的構(gòu)建分布式應(yīng)用。通過(guò)如下代碼,即可輕松遠(yuǎn)程訪問(wèn)上面示例中的 Books 接口:
$books = $app->make(RpcProxy::class, [ 'interface'=>Books::class, 'prefix'=>'http://x.x.x.x/' ]); $books->findBooks(...);
同時(shí)還可以方便的發(fā)起并發(fā)請(qǐng)求,如:
$res = MultiRpc::run([
function()use($service1){
return $service1->doSomething();
},
function()use($service2){
return $service2->doSomething();
},
]);
更多內(nèi)容請(qǐng)查看文檔
4. IDE 友好
IDE 的代碼提示功能可以讓開(kāi)發(fā)者輕松不少,但很多框架在這方面做的并不好,你必須看文檔或者代碼,才能知道某個(gè)功能的用法。PhpBoot 在一開(kāi)始就非常注重框架的 IDE 友好性,盡可能讓框架保持準(zhǔn)確的代碼提示。比如下圖是 DB 庫(kù)在 PhpStorm 下的使用:
主要特性
安裝和配置
1. 安裝 composer (已安裝可忽略)
curl -s http://getcomposer.org/installer | php
2. 安裝 PhpBoot
composer require "caoym/phpboot"
3. index.php 加載 PhpBoot
<?php require __DIR__.'/vendor/autoload.php'; $app = \PhpBoot\Application::createByDefault(__DIR__.'/config/config.php'); $app->loadRoutesFromPath(__DIR__.'/App/Controllers'); $app->dispatch();
幫助和文檔
-
本人郵箱 [email protected]
