PhalApi(π框架) - PHP輕量級開源接口框架


PhalApi(π框架) - V1.4.0

PhalApi,簡稱π框架,是一個PHP輕量級開源接口框架,專注于接口開發(fā),致力讓接口開發(fā)更簡單。它:

1、致力于快速、穩(wěn)定、持續(xù)交付有價值的接口服務、關注于測試驅動開發(fā)、領域驅動設計、極限編程、敏捷開發(fā)

2、有眾多的擴展類庫,與更多開源項目一起提供高效便捷的解決方案

3、支持HTTP、SOAP和RPC協(xié)議,可用于快速搭建微服務、RESTful接口或Web Services

PhalApi代碼開源、產(chǎn)品開源、思想開源,請放心使用。更多請訪問PhalApi官網(wǎng)。再次感謝開源中國、各位貢獻者和同學。

導讀

本文內(nèi)容主要分為三部分,即:

PART 1:安裝、在線體驗與在線接口文檔

PART 2:快速開發(fā)、單元測試、目錄結構、SDK包和Library擴展類庫

PART 3:背景回顧、貢獻者、許可與更新日記

更多請訪問在線文檔

1-1、安裝

請從release分支拉取發(fā)布版本的代碼

推薦部署于Linux服務器

建議PHP >= 5.3.3

將代碼下載解壓到服務器后,打開瀏覽器,訪問安裝向導(推薦使用nginx,并將根目錄設置為Public):

http://localhost/PhalApi/Public/install/

訪問默認接口服務,驗證是否安裝成功:

http://localhost/PhalApi/Public/demo/

更多其他創(chuàng)建項目的方式,請訪問創(chuàng)建一個自己的項目。

框架升級與框架共享

我們會盡最大的努力保證完美兼容性的升級。當框架有新版本需要升級時,只需要簡單一步:更新替換./PhalApi/PhalApi核心框架目錄即可。

如果需要多個項目共享使用PhalApi框架,可以把./PhalApi/PhalApi移到任何位置,然后對應修改./PhalApi/Public/init.php文件中引入路徑即可(但會導致部分腳本命令不可用)。如:

require_once API_ROOT . '/path/to/PhalApi/PhalApi.php';

1-2、在線體驗

默認的接口服務:

http://demo.phalapi.net/

帶參數(shù)的示例接口:

http://demo.phalapi.net/?service=Default.Index&username=oschina

{

"ret": 200,

"data": {

"title": "Hello World!",

"content": "oschina您好,歡迎使用PhalApi!",

"version": "1.3.4",

"time": 1473863280

},

"msg": ""

}

故意請求一個非法的服務:

http://demo.phalapi.net/?service=Demo.None

{

"ret": 400,

"data": [],

"msg": "非法請求:服務Demo.None不存在"

}

1-3、在線接口文檔(自動生成)

按框架指定的格式完成接口代碼編寫后,PhalApi會自動生成在線接口列表文檔和在線接口詳情文檔,以方便客戶端實時查看最新的接口簽名和返回字段。

(1) 在線接口列表文檔

訪問對應項目路徑下的listAllApis.php可查看此項目下全部的接口服務,如訪問:

http://demo.phalapi.net/listAllApis.php

(2) 在線接口詳情文檔

訪問對應項目路徑下的checkApiParams.php,并傳遞?service=xxx.xxx參數(shù)即可查看具體的接口文檔,如訪問:

http://demo.phalapi.net/checkApiParams.php?service=Default.Index

2-1、快速開發(fā)

(1) 編寫一個Hello World!接口

以下代碼需要放置到接口類文件./Demo/Api/Welcome.php中:


class Api_Welcome extends PhalApi_Api {

public function say() {

$rs = array();

$rs['title'] = 'Hello World!';

return $rs;

}

}

(2) 訪問接口

接口訪問的格式為:接口域名 + 入口路徑 + ?service=XXX.XXX,此示例中對應的鏈接為:

http://localhost/Public/demo/?service=Welcome.Say

(3) 接口返回

結果默認以JSON格式返回,即:

{"ret":200,"data":{"title":"Hello World!"},"msg":""}

(4) 運行截圖

2-2、接口單元測試

不能被測試的代碼,不是好代碼。

在使用此框架進行接口開發(fā)時,我們強烈建議使用測試驅動開發(fā)(TDD),以便于不斷積累形成接口測試體系,保證接口向前向后兼容。例如對接口/?service=User.GetBaseInfo&userId=1進行單元測試時,按:構造-操作-檢驗(BUILD-OPERATE-CHECK)模式,即:

/**

* @group testGetBaseInfo

*/

public function testGetBaseInfo()

{

//Step 1. 構建請求URL

$str = 'service=User.GetBaseInfo&userId=1';

//Step 2. 執(zhí)行請求(模擬接口請求)

$rs = PhalApi_Helper_TestRunner::go($url);

//Step 3. 驗證

$this->assertNotEmpty($rs);

$this->assertArrayHasKey('code', $rs);

$this->assertArrayHasKey('msg', $rs);

$this->assertArrayHasKey('info', $rs);

$this->assertEquals(0, $rs['code']);

$this->assertEquals('dogstar', $rs['info']['name']);

$this->assertEquals('oschina', $rs['info']['from']);

}

運行效果:

對于框架的核心代碼,我們也一直堅持著單元測試,其核心框架代碼的單元測試覆蓋率可高達96%以上。

2-3、主要目錄結構

.

├── PhalApi? ? ? ? //PhalApi框架,后期可以整包升級

├── Library? ? ? ? //PhalApi擴展類庫,可根據(jù)需要自由添加擴展

├── SDK? ? ? ? ? ? //PhalApi提供的SDK包,客戶可根據(jù)需要選用

├── Public? ? ? ? ? //對外訪問目錄,建議隱藏PHP實現(xiàn)

│? └── demo? ? ? ? //Demo服務訪問入口

├── Config? ? ? ? ? //項目接口公共配置,主要有:app.php, sys.php, dbs.php

├── Data? ? ? ? ? ? //項目接口公共數(shù)據(jù)

├── Language? ? ? ? //項目接口公共翻譯

├── Runtime? ? ? ? //項目接口運行文件目錄,用于存放日記,可軟鏈到別的區(qū)

└── Demo? ? ? ? ? ? //應用接口服務,名稱自取,可多組

├── Api? ? ? ? ? ? //接口響應層

├── Domain? ? ? ? ? //接口領域層

├── Model? ? ? ? ? //接口持久層

└── Tests? ? ? ? ? //接口單元測試

以下為一示例目錄結構圖解:

2-4、基于接口查詢語言(ASL)的SDK包支持

目前已提供的SDK有:

JAVA版

Objective-c版

PHP版

C#版

JS版

Golang版

React-Native版

Ruby版

Python版

基于接口查詢語言,可用一句話來描述接口請求,如JAVA的請求示例:

PhalApiClientResponse response = PhalApiClient.create()

.withHost("http://demo.phalapi.net/")

.withService("Default.Index")? ? ? ? ? //接口服務

.withParams("username", "dogstar")? ? //接口參數(shù)

.withTimeout(3000)? ? ? ? ? ? ? ? ? ? //接口超時

.request();

2-5、PhalApi-Library擴展類庫

PhalApi框架擴展類庫,致力于與開源項目一起提供高效便捷的解決方案,更多請查看:PhalApi-Library。

3-1、背景回顧

過去十年,是互聯(lián)網(wǎng)時代;如今的十年,是移動時代。

在iOS、Android、Windows Phone、PC版、Web版等各種終端和各種垂直應用不停更新迭代的大背景下,顯然很是需要一組乃至一系列穩(wěn)定的后臺接口支撐。接口,顯然是如此重要,正如Jaroslav Tulach在《軟件框架設計的藝術》一書中說的:API就如同恒星,一旦出現(xiàn),便與我們永恒共存。

所以,這里希望通過提供一個快速可用的后臺接口開發(fā)框架,可以:

一來,支撐輕量級項目后臺接口的快速開發(fā);

二來,闡明如何進行接口開發(fā)、設計和維護,以很好支持海量訪問、大數(shù)據(jù)、向前向后兼容等;

三來,順便分享一些好的思想、技巧和有用的工具、最佳實踐。

如果您有接口項目開發(fā)的需要,又剛好需要一個PHP接口框架,歡迎使用!我們也致力于將PhalApi維護成像恒星一樣:不斷更新,保持生氣;為接口負責,為開源負責!

3-2、加入我們

顯然,這只是一個開始,我們要走的路還很長。PhalApi是我們(開發(fā)團隊)的框架,更是我們(所有人)的框架。在一個人還年輕的時候,我覺得,就應該著手致力做一些對社會有意義的事情,一如開源。歡迎&期待你的加入!

在加入前,可先查看致框架貢獻者:加入PhalApi開源指南。至此,感謝以下貢獻者(排名不分先后):

Aevit

dogstar

George

Scott

Summer

zz.guo(郭了個治浩)

小艾

大蟬

冰霜

火柴

黃苗筍

文振熙(喵了個咪)

愛編程的小逗比

... ...

3-3、許可

PhalApi是開源框架,承諾永遠免費,使用GPL協(xié)議,更多請訪問許可。

3-4、更新日記

更新日記,主要是為了說明,我們一直在努力更新和維護。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 那天,我和孫記者約在小鎮(zhèn)的茶樓見面。微風輕撫我的臉龐,帶來小鎮(zhèn)獨特的古香;南巷的木制風車隨風輕輕旋轉,給稻田...
    墨楠鐘閱讀 336評論 0 1
  • 進步是一點點來的 今天干了一件大事,從蕭山市心廣場騎回了學校,悠悠的騎,臉頰通紅,成了猴屁股。一路被他像趕著馬匹似...
    fangyuanjili閱讀 279評論 0 0
  • 對于不漂亮的姑娘,或許從來很少幻想能遇到王子,她們只想過平常人的生活,安心的做自己的灰姑娘??墒沁@個愿望一旦打破,...
    楓紅云天閱讀 585評論 0 0

友情鏈接更多精彩內(nèi)容