PhalApi開(kāi)源接口框架有多好用?最全后端PHP開(kāi)發(fā)攻略整理

PhalApi開(kāi)源接口框架
讀音:派框架,官網(wǎng):https://www.phalapi.net/
PhalApi是一個(gè)PHP輕量級(jí)開(kāi)源接口框架,致力于快速開(kāi)發(fā)接口服務(wù)。支持HTTP/SOAP/RPC等協(xié)議,可用于搭建接口/微服務(wù)/RESTful接口/Web Services。承諾永久免費(fèi),可用于商業(yè)用途。
它支持自動(dòng)生成接口文檔、自動(dòng)進(jìn)行參數(shù)校驗(yàn)、自動(dòng)生成單元測(cè)試代碼、自動(dòng)擁有CURD數(shù)據(jù)接口、自動(dòng)安裝程序,讓接口開(kāi)發(fā)更簡(jiǎn)單、更高效、更專(zhuān)業(yè)。
PhalApi官網(wǎng)截圖:

在線(xiàn)示例
使用PhalApi開(kāi)源接口框架,能快速開(kāi)發(fā)編寫(xiě)你的API接口,并能自動(dòng)生成在線(xiàn)接口文檔。
在線(xiàn)示例:
在線(xiàn)接口文檔:http://demo.phalapi.net/docs.php
接口詳情文檔(以默認(rèn)接口為例):http://demo.phalapi.net/docs.php?service=App.Site.Index&detail=1&type=fold
默認(rèn)接口服務(wù):http://demo.phalapi.net/?s=App.Site.Index
PhalApi會(huì)根據(jù)你編寫(xiě)的接口的參數(shù)配置和代碼注釋?zhuān)詣?dòng)實(shí)時(shí)生成在線(xiàn)接口文檔。接口列表頁(yè)效果類(lèi)似如下:

PhalApi還支持在線(xiàn)接口測(cè)試、請(qǐng)求示例說(shuō)明、生成離線(xiàn)版HTML接口文檔、實(shí)時(shí)更新。接口文檔詳情頁(yè)效果類(lèi)似如下:

快速安裝
composer一鍵安裝
使用composer創(chuàng)建項(xiàng)目的命令,可實(shí)現(xiàn)一鍵安裝。
$ composer create-project phalapi/phalapi溫馨提示:關(guān)于composer的使用,請(qǐng)參考Composer 中文網(wǎng) / Packagist 中國(guó)全量鏡像。
手動(dòng)下載安裝
或者,也可以進(jìn)行手動(dòng)安裝。將此Git項(xiàng)目代碼下載解壓后,進(jìn)行可選的composer更新,即:
composer update部署
Nginx配置
如果使用的是Nginx,可參考以下配置。
server {listen 80;server_name dev.phalapi.net;# 將根目錄設(shè)置到public目錄root /path/to/phalapi/public;charset utf-8;location / {index index.php;}location ~ \.php$ {fastcgi_split_path_info ^(.+\.php)(/.+)$;# 根據(jù)當(dāng)前環(huán)境,選擇合適的通訊方式# fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}}
配置時(shí)需要將網(wǎng)站根目錄設(shè)置到public目錄,配置保存后重啟nginx。
溫馨提示:推薦將訪(fǎng)問(wèn)根路徑指向/path/to/phalapi/public。
數(shù)據(jù)庫(kù)配置
如何使用的是MySQL數(shù)據(jù)庫(kù),參考修改./config/dbs.php數(shù)據(jù)庫(kù)配置。
return array(/*** DB數(shù)據(jù)庫(kù)服務(wù)器集群 / database cluster*/'servers' => array('db_master' => array( // 服務(wù)器標(biāo)記 / database identify'type' => 'mysql', // 數(shù)據(jù)庫(kù)類(lèi)型,暫時(shí)只支持:mysql, sqlserver / database type'host' => '127.0.0.1', // 數(shù)據(jù)庫(kù)域名 / database host'name' => 'phalapi', // 數(shù)據(jù)庫(kù)名字 / database name'user' => 'root', // 數(shù)據(jù)庫(kù)用戶(hù)名 / database user'password' => '', // 數(shù)據(jù)庫(kù)密碼 / database password'port' => 3306, // 數(shù)據(jù)庫(kù)端口 / database port'charset' => 'UTF8', // 數(shù)據(jù)庫(kù)字符集 / database charset'pdo_attr_string' => false, // 數(shù)據(jù)庫(kù)查詢(xún)結(jié)果統(tǒng)一使用字符串,true是,false否'driver_options' => array( // PDO初始化時(shí)的連接選項(xiàng)配置// 若需要更多配置,請(qǐng)參考官方文檔:https://www.php.net/manual/zh/pdo.constants.php),),),// 更多代碼省略……);
最后,需要給runtime目錄添加寫(xiě)入權(quán)限。
運(yùn)行和使用
調(diào)用接口
在PhalApi,你可以通過(guò)service參數(shù)(短名字是s參數(shù))指定需要調(diào)用的接口服務(wù)。例如,訪(fǎng)問(wèn)默認(rèn)接口服務(wù)。
http://dev.phalapi.net/?s=App.Site.Index接口請(qǐng)求后結(jié)果輸出類(lèi)似如下:
{"ret": 200,"data": {"title": "Hello PhalApi","version": "2.4.2","time": 1501079142},"msg": ""}
對(duì)應(yīng)執(zhí)行的PHP代碼在./src/app/Api/Site.php文件,源碼片段如下:
namespace App\Api;use PhalApi\Api;/*** 默認(rèn)接口服務(wù)類(lèi)* @author: dogstar <chanzonghuang@gmail.com> 2014-10-04*/class Site extends Api {public function getRules() {return array('index' => array('username' => array('name' => 'username', 'default' => 'PhalApi', 'desc' => '用戶(hù)名'),),);}/*** 默認(rèn)接口服務(wù)* @desc 默認(rèn)接口服務(wù),當(dāng)未指定接口服務(wù)時(shí)執(zhí)行此接口服務(wù)* @return string title 標(biāo)題* @return string content 內(nèi)容* @return string version 版本,格式:X.X.X* @return int time 當(dāng)前時(shí)間戳* @exception 400 非法請(qǐng)求,參數(shù)傳遞錯(cuò)誤*/public function index() {return array('title' => 'Hello ' . $this->username,'version' => PHALAPI_VERSION,'time' => $_SERVER['REQUEST_TIME'],);}}
運(yùn)行效果,截圖如下:

自動(dòng)生成的接口文檔詳情頁(yè)局部截圖如下:

翻譯
修改./public/init.php文件,可設(shè)置當(dāng)前語(yǔ)言。
// 翻譯語(yǔ)言包設(shè)定-簡(jiǎn)體中文\PhalApi\SL('zh_cn');// Setting language to English\PhalApi\SL('en');
一張圖告訴你如何使用PhalApi 2.x

PhalApi開(kāi)發(fā)文檔
專(zhuān)為PHPer準(zhǔn)備的優(yōu)雅而詳細(xì)的開(kāi)發(fā)文檔,基本都能在文檔找到你要的答案,請(qǐng)看:PhalApi 2.x 開(kāi)發(fā)文檔,http://docs.phalapi.net/#/v2.0/。
文檔使用markdown編寫(xiě),文檔頁(yè)面截圖如下:

開(kāi)發(fā)文檔大綱:
PhalApi 2.x 開(kāi)發(fā)文檔前言前言如何升級(jí)PhalApi?一、快速開(kāi)發(fā)1.1下載與安裝1.2 運(yùn)行Hello World1.3 如何請(qǐng)求接口服務(wù)1.4 接口響應(yīng)與在線(xiàn)調(diào)試1.5 Api接口層1.6 DataApi通用數(shù)據(jù)接口1.7 Domain領(lǐng)域?qū)优cADM模式1.8 Model數(shù)據(jù)層與數(shù)據(jù)庫(kù)操作1.9 DataModel數(shù)據(jù)基類(lèi)1.10 單元測(cè)試1.11 自動(dòng)加載和PSR-41.12 接口文檔1.13 初始化二、數(shù)據(jù)庫(kù)2.1 數(shù)據(jù)庫(kù)連接2.2 數(shù)據(jù)庫(kù)與NotORM2.3 數(shù)據(jù)庫(kù)使用和查詢(xún)2.4 數(shù)據(jù)庫(kù)分庫(kù)分表策略2.5 連接多個(gè)數(shù)據(jù)庫(kù)2.6 打印和保存SQL語(yǔ)句2.7 定制你的Model基類(lèi)三、高級(jí)專(zhuān)題3.1 接口參數(shù)3.2 配置3.3 日志3.4 緩存3.5 過(guò)濾器(接口簽名)3.6 COOKIE3.7 加密3.8 國(guó)際化3.9 CURL請(qǐng)求3.10 工具和雜項(xiàng)3.11 DI服務(wù)匯總3.12 擴(kuò)展類(lèi)庫(kù)3.13 SDK包的使用3.14 腳本命令3.15 MQ隊(duì)列3.16 錯(cuò)誤處理
2020視頻教程
B站首發(fā),第一課~第十一課,配套有每節(jié)課的視頻知識(shí)點(diǎn)大綱。
http://docs.phalapi.net/#/v2.0/video_1
視頻課程:
PhalApi 2020視頻教程第一課 B站首發(fā),2020視頻教程開(kāi)講啦!第二課 視頻教程 - 下載和安裝第三課 視頻教程 - Hello World第四課 視頻教程 - 如何請(qǐng)求接口服務(wù)第五課 視頻教程 - 接口響應(yīng)與在線(xiàn)調(diào)試第六課 視頻教程 - Api接口層第七課 視頻教程 - Domain領(lǐng)域業(yè)務(wù)層與ADM模式解說(shuō)第八課 視頻教程 - Model數(shù)據(jù)層與數(shù)據(jù)庫(kù)連接第九課 視頻教程 - 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)與PHPUnit第十課 視頻教程 - 自動(dòng)加載和PSR-4第十一課 視頻教程 - 接口文檔視頻教程 - 十分鐘體驗(yàn)PhalApi Pro,讓PHP接口開(kāi)發(fā)更有趣!視頻教程 - 茶店應(yīng)用實(shí)戰(zhàn)
相關(guān)書(shū)籍
電子書(shū):《初識(shí)PhalApi:探索接口服務(wù)開(kāi)發(fā)的技藝》
作者:黃禪宗
圖靈社區(qū)鏈接:https://www.ituring.com.cn/book/2405
大綱:
獻(xiàn)詞前言第一部分 探索第1章 遇見(jiàn)PhalApi第2章 基礎(chǔ)入門(mén)第3章 高級(jí)主題第4章 不只是編碼第二部分 項(xiàng)目案例第5章 全新的創(chuàng)業(yè)項(xiàng)目第6章 重寫(xiě)歷史遺留項(xiàng)目第7章 一個(gè)極致的項(xiàng)目第三部分 再進(jìn)一步第8章 PhalApi完美詮釋第9章 如何有效設(shè)計(jì)接口框架第10章 開(kāi)源這條路附錄A 接口服務(wù)文檔模板致謝

電子書(shū):《良質(zhì)!PHP企業(yè)級(jí)系統(tǒng)開(kāi)發(fā)》
作者:黃禪宗
圖靈社區(qū)鏈接:https://www.ituring.com.cn/book/2664
大綱:
推薦序前言獻(xiàn)辭第一部分 重新定義項(xiàng)目開(kāi)發(fā)第 1 章 軟件開(kāi)發(fā)本質(zhì)論第 2 章 選擇高起點(diǎn)第 3 章 向世界發(fā)布你的代碼第二部分 PHP高級(jí)編程第 4 章 回歸原生態(tài)第 5 章 PHPUnit單元測(cè)試新解第三部分 PHP企業(yè)級(jí)系統(tǒng)開(kāi)發(fā)第 6 章 核心基礎(chǔ)模塊設(shè)計(jì)第 7 章 大型網(wǎng)站開(kāi)發(fā)范式第 8 章 高可用接口服務(wù)系統(tǒng)第 9 章 極致的管理后臺(tái)系統(tǒng)第 10 章 深藏不露的計(jì)劃任務(wù)系統(tǒng)第四部分 追求卓越第 11 章 如何成為明星員工第 12 章 贏在角色轉(zhuǎn)換致謝

子項(xiàng)目
如果對(duì)PhalApi開(kāi)源框架的內(nèi)部實(shí)現(xiàn)、源代碼和技術(shù)架構(gòu)感興趣,可以查看以下子項(xiàng)目。
phalapi/kernal框架內(nèi)核
phalapi/notorm數(shù)據(jù)庫(kù)包
PhalApi 2.x 版本的系統(tǒng)架構(gòu)如下:

PhalApi composer 擴(kuò)展
phalapi/authAuth權(quán)限擴(kuò)展
phalapi/cliCLI擴(kuò)展類(lèi)庫(kù)
phalapi/fast-routeFastRoute快速路由
phalapi-aliyun-ossPhalApi-OSS阿里云OSS包
phalapi/PHPMailer基于PHPMailer的郵件發(fā)送
phalapi/qiniu七牛云存儲(chǔ)接口調(diào)用
phalapi/qrcodePhalApi 二維碼擴(kuò)展
phalapi/pinyinPhalApi 2.x 拼音擴(kuò)展
phalapi/jwt基于PhalApi2的JWT拓展
chenall/phalapi-weixin微信擴(kuò)展
phalapi/wechatmini微信小程序擴(kuò)展
phalapi/ding-com-bot釘釘企業(yè)內(nèi)部webhook機(jī)器人擴(kuò)展
phalapi-pay支持微信支付和支付寶支付
溫馨提示:以上擴(kuò)展需要先通過(guò)composer安裝再使用。更多擴(kuò)展類(lèi)庫(kù)的使用和開(kāi)發(fā),請(qǐng)參考文檔:PhalApi框架擴(kuò)展類(lèi)庫(kù):http://docs.phalapi.net/#/v2.0/library。
PhalApi應(yīng)用插件
運(yùn)營(yíng)平臺(tái)插件
應(yīng)用用戶(hù)插件
加密解密插件
支付寶插件
茶店微信小程序應(yīng)用
在線(xiàn)接口文檔主題包
溫馨提示:應(yīng)用插件和composer擴(kuò)展的區(qū)別在于,應(yīng)用插件顆粒度更大,功能更具體,可能不僅有數(shù)據(jù)庫(kù)、接口、界面、還可能配合其他終端,并且不受composer的規(guī)范約束,是PhalApi自主發(fā)明和設(shè)計(jì)的開(kāi)發(fā)方式。更多請(qǐng)參考:第三方應(yīng)用插件開(kāi)發(fā)教程:http://docs.phalapi.net/#/v2.0/how-to-dev-plugin。
基于PhalApi開(kāi)發(fā)的技術(shù)產(chǎn)品
以下產(chǎn)品均使用了PhalApi開(kāi)源框架,并為官方自主研發(fā)的產(chǎn)品,歡迎個(gè)人/團(tuán)隊(duì)/企業(yè)使用。
接口大師-即刻搭建您的接口開(kāi)放平臺(tái)(原名:PhalApi專(zhuān)業(yè)版)
產(chǎn)品官網(wǎng):http://pro.phalapi.net/

果創(chuàng)云-后端低代碼開(kāi)發(fā)平臺(tái)
產(chǎn)品官網(wǎng):http://yesapi.cn/

YesDev協(xié)作云-在線(xiàn)協(xié)作你的全部項(xiàng)目
產(chǎn)品官網(wǎng):https://www.yesdev.cn/

PhalApi 2.x 版本完美詮釋
2.x 版本系統(tǒng)架構(gòu)
主要分為三層:
phalapi/phalapi 項(xiàng)目應(yīng)用層,可使用phalapi/phalapi搭建微服務(wù)、接口系統(tǒng)、RESTful、WebServices等。
擴(kuò)展類(lèi)庫(kù) 擴(kuò)展類(lèi)庫(kù)是指可選的、可重用的組件或類(lèi)庫(kù),可以直接集成使用,由廣大開(kāi)發(fā)人員維護(hù)分享,對(duì)應(yīng)原來(lái)的PhalApi-Library項(xiàng)目。
核心框架 分別兩大部分,PhalApi核心部分kernal,以及優(yōu)化后的notorm。
其中,各自的composer和github項(xiàng)目分別是:
| 項(xiàng)目 | composer | github |
|---|---|---|
| phalapi/phalapi | phalapi/phalapi | phalapi/phalapi |
| 擴(kuò)展類(lèi)庫(kù) | 由廣大開(kāi)發(fā)人員共同維護(hù)、分享,composer建議統(tǒng)一注冊(cè)到phalapi。 | 由廣大開(kāi)發(fā)人員共同維護(hù)、分享,源代碼可維護(hù)在開(kāi)發(fā)者各自的Github倉(cāng)庫(kù)。 |
| 核心框架 | phalapi/kernal | phalapi/kernal |
框架核心部分UML靜態(tài)結(jié)構(gòu)圖
PhalApi 2.x 版本的核心框架部分的UML靜態(tài)結(jié)構(gòu)圖,高清版如下所示:

首先,綠色部分的PhalApi\PhalApi類(lèi)是整個(gè)接口系統(tǒng)的訪(fǎng)問(wèn)入口,也就是項(xiàng)目應(yīng)用系統(tǒng)、客戶(hù)端使用的關(guān)鍵所在。相關(guān)的調(diào)用代碼,可以參考統(tǒng)一入口文件的實(shí)現(xiàn)代碼片段。
$pai = new \PhalApi\PhalApi();$pai->response()->output();
只需要兩行代碼,便可完成對(duì)接口服務(wù)的請(qǐng)求響應(yīng)。
其次,是黃色部分的Api、Domain和Model這三層,也就是我們常說(shuō)的ADM分層架構(gòu)。這部分,需要開(kāi)發(fā)人員關(guān)注,因?yàn)檫@也是具體項(xiàng)目開(kāi)發(fā)需要自己實(shí)現(xiàn)的部分。
最后,是紅色部分的DI依賴(lài)注入,也是整個(gè)框架的核心所在。不僅在核心框架中使用頻率最高,乃至在項(xiàng)目應(yīng)用中也會(huì)經(jīng)常被用到。
核心執(zhí)行流程時(shí)序圖
PhalApi 2.x 版本的核心執(zhí)行流程時(shí)序圖,與1.x 版本基本一致,可以看出,不管技術(shù)如何升級(jí),PhalApi的最初的核心時(shí)序流程仍保持著活力。唯一變化的是各個(gè)類(lèi)名。

社區(qū)溝通
派框架-PhalApi交流群-QQ群(1165人)
群號(hào):421032344
派框架-PhalApi交流群2-QQ群(830人)
群號(hào):459352221
PhalApi技術(shù)交流群-微信群(83人)
添加微信號(hào):dogstarhuang 進(jìn)群
代碼倉(cāng)庫(kù)
Gitee碼云 - PhalApi開(kāi)源接口框架(1.7k Star)
代碼鏈接:https://gitee.com/dogstar/PhalApi
Github - PhalApi開(kāi)源接口框架(1.4 Star)
代碼鏈接:https://github.com/phalapi/phalapi
版本更新
2021年7月發(fā)布更新了 PhalApi 2.17.2 版本。
PhalApi 2.17.2 版本
[BUG修復(fù)]
1、SQL記錄,只提取部分必要的參數(shù),避免全部記錄,以及避免記錄密碼等敏感信息到日志文件
2、翻譯和DataApi參數(shù)說(shuō)明補(bǔ)充
3、DataModel調(diào)用不存在方法時(shí)的異常提示信息,去掉多余的美元符號(hào)
4、在線(xiàn)接口文檔模板判斷調(diào)整,避免出現(xiàn)warning
更多歷史版本更新日記,請(qǐng)查看:
http://docs.phalapi.net/#/v2.0/changelog
