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


PhalApi(π框架) - V1.4.0

PhalApi辣苏,簡(jiǎn)稱π框架肝箱,是一個(gè)PHP輕量級(jí)開源接口框架哄褒,專注于接口開發(fā),致力讓接口開發(fā)更簡(jiǎn)單狭园。它:

1读处、致力于快速、穩(wěn)定唱矛、持續(xù)交付有價(jià)值的接口服務(wù)、關(guān)注于測(cè)試驅(qū)動(dòng)開發(fā)井辜、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)绎谦、極限編程、敏捷開發(fā)

2粥脚、有眾多的擴(kuò)展類庫(kù)窃肠,與更多開源項(xiàng)目一起提供高效便捷的解決方案

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

PhalApi代碼開源树灶、產(chǎn)品開源纤怒、思想開源,請(qǐng)放心使用天通。更多請(qǐng)?jiān)L問PhalApi官網(wǎng)泊窘。再次感謝開源中國(guó)、各位貢獻(xiàn)者和同學(xué)像寒。

導(dǎo)讀

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

PART 1:安裝、在線體驗(yàn)與在線接口文檔

PART 2:快速開發(fā)诺祸、單元測(cè)試携悯、目錄結(jié)構(gòu)、SDK包和Library擴(kuò)展類庫(kù)

PART 3:背景回顧筷笨、貢獻(xiàn)者憔鬼、許可與更新日記

更多請(qǐng)?jiān)L問在線文檔

1-1奥秆、安裝

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

推薦部署于Linux服務(wù)器

建議PHP >= 5.3.3

將代碼下載解壓到服務(wù)器后逊彭,打開瀏覽器,訪問安裝向?qū)Вㄍ扑]使用nginx构订,并將根目錄設(shè)置為Public):

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

訪問默認(rèn)接口服務(wù)侮叮,驗(yàn)證是否安裝成功:

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

更多其他創(chuàng)建項(xiàng)目的方式,請(qǐng)?jiān)L問創(chuàng)建一個(gè)自己的項(xiàng)目悼瘾。

框架升級(jí)與框架共享

我們會(huì)盡最大的努力保證完美兼容性的升級(jí)囊榜。當(dāng)框架有新版本需要升級(jí)時(shí)审胸,只需要簡(jiǎn)單一步:更新替換./PhalApi/PhalApi核心框架目錄即可。

如果需要多個(gè)項(xiàng)目共享使用PhalApi框架卸勺,可以把./PhalApi/PhalApi移到任何位置砂沛,然后對(duì)應(yīng)修改./PhalApi/Public/init.php文件中引入路徑即可(但會(huì)導(dǎo)致部分腳本命令不可用)。如:

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

1-2曙求、在線體驗(yàn)

默認(rèn)的接口服務(wù):

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": ""

}

故意請(qǐng)求一個(gè)非法的服務(wù):

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

{

"ret": 400,

"data": [],

"msg": "非法請(qǐng)求:服務(wù)Demo.None不存在"

}

1-3悟狱、在線接口文檔(自動(dòng)生成)

按框架指定的格式完成接口代碼編寫后静浴,PhalApi會(huì)自動(dòng)生成在線接口列表文檔和在線接口詳情文檔,以方便客戶端實(shí)時(shí)查看最新的接口簽名和返回字段挤渐。

(1) 在線接口列表文檔

訪問對(duì)應(yīng)項(xiàng)目路徑下的listAllApis.php可查看此項(xiàng)目下全部的接口服務(wù)苹享,如訪問:

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

(2) 在線接口詳情文檔

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

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

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

(1) 編寫一個(gè)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,此示例中對(duì)應(yīng)的鏈接為:

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

(3) 接口返回

結(jié)果默認(rèn)以JSON格式返回软免,即:

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

(4) 運(yùn)行截圖

2-2宫纬、接口單元測(cè)試

不能被測(cè)試的代碼,不是好代碼或杠。

在使用此框架進(jìn)行接口開發(fā)時(shí)哪怔,我們強(qiáng)烈建議使用測(cè)試驅(qū)動(dòng)開發(fā)(TDD),以便于不斷積累形成接口測(cè)試體系向抢,保證接口向前向后兼容认境。例如對(duì)接口/?service=User.GetBaseInfo&userId=1進(jìn)行單元測(cè)試時(shí),按:構(gòu)造-操作-檢驗(yàn)(BUILD-OPERATE-CHECK)模式挟鸠,即:

/**

* @group testGetBaseInfo

*/

public function testGetBaseInfo()

{

//Step 1. 構(gòu)建請(qǐng)求URL

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

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

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

//Step 3. 驗(yàn)證

$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']);

}

運(yùn)行效果:

對(duì)于框架的核心代碼叉信,我們也一直堅(jiān)持著單元測(cè)試,其核心框架代碼的單元測(cè)試覆蓋率可高達(dá)96%以上艘希。

2-3硼身、主要目錄結(jié)構(gòu)

.

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

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

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

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

│? └── demo? ? ? ? //Demo服務(wù)訪問入口

├── Config? ? ? ? ? //項(xiàng)目接口公共配置撒顿,主要有:app.php, sys.php, dbs.php

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

├── Language? ? ? ? //項(xiàng)目接口公共翻譯

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

└── Demo? ? ? ? ? ? //應(yīng)用接口服務(wù),名稱自取吩屹,可多組

├── Api? ? ? ? ? ? //接口響應(yīng)層

├── Domain? ? ? ? ? //接口領(lǐng)域?qū)?/p>

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

└── Tests? ? ? ? ? //接口單元測(cè)試

以下為一示例目錄結(jié)構(gòu)圖解:

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

目前已提供的SDK有:

JAVA版

Objective-c版

PHP版

C#版

JS版

Golang版

React-Native版

Ruby版

Python版

基于接口查詢語言,可用一句話來描述接口請(qǐng)求煤搜,如JAVA的請(qǐng)求示例:

PhalApiClientResponse response = PhalApiClient.create()

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

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

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

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

.request();

2-5免绿、PhalApi-Library擴(kuò)展類庫(kù)

PhalApi框架擴(kuò)展類庫(kù),致力于與開源項(xiàng)目一起提供高效便捷的解決方案擦盾,更多請(qǐng)查看:PhalApi-Library嘲驾。

3-1、背景回顧

過去十年厌衙,是互聯(lián)網(wǎng)時(shí)代距淫;如今的十年,是移動(dòng)時(shí)代婶希。

在iOS、Android蓬衡、Windows Phone喻杈、PC版、Web版等各種終端和各種垂直應(yīng)用不停更新迭代的大背景下狰晚,顯然很是需要一組乃至一系列穩(wěn)定的后臺(tái)接口支撐筒饰。接口,顯然是如此重要壁晒,正如Jaroslav Tulach在《軟件框架設(shè)計(jì)的藝術(shù)》一書中說的:API就如同恒星瓷们,一旦出現(xiàn),便與我們永恒共存秒咐。

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

一來携取,支撐輕量級(jí)項(xiàng)目后臺(tái)接口的快速開發(fā)攒钳;

二來,闡明如何進(jìn)行接口開發(fā)雷滋、設(shè)計(jì)和維護(hù)不撑,以很好支持海量訪問、大數(shù)據(jù)晤斩、向前向后兼容等焕檬;

三來,順便分享一些好的思想澳泵、技巧和有用的工具实愚、最佳實(shí)踐。

如果您有接口項(xiàng)目開發(fā)的需要,又剛好需要一個(gè)PHP接口框架爆侣,歡迎使用萍程!我們也致力于將PhalApi維護(hù)成像恒星一樣:不斷更新,保持生氣兔仰;為接口負(fù)責(zé)茫负,為開源負(fù)責(zé)!

3-2乎赴、加入我們

顯然忍法,這只是一個(gè)開始,我們要走的路還很長(zhǎng)榕吼。PhalApi是我們(開發(fā)團(tuán)隊(duì))的框架饿序,更是我們(所有人)的框架。在一個(gè)人還年輕的時(shí)候羹蚣,我覺得原探,就應(yīng)該著手致力做一些對(duì)社會(huì)有意義的事情,一如開源顽素。歡迎&期待你的加入咽弦!

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

Aevit

dogstar

George

Scott

Summer

zz.guo(郭了個(gè)治浩)

小艾

大蟬

冰霜

火柴

黃苗筍

文振熙(喵了個(gè)咪)

愛編程的小逗比

... ...

3-3、許可

PhalApi是開源框架全蝶,承諾永遠(yuǎn)免費(fèi)闹蒜,使用GPL協(xié)議,更多請(qǐng)?jiān)L問許可抑淫。

3-4绷落、更新日記

更新日記,主要是為了說明丈冬,我們一直在努力更新和維護(hù)嘱函。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市埂蕊,隨后出現(xiàn)的幾起案子往弓,更是在濱河造成了極大的恐慌,老刑警劉巖蓄氧,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件函似,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喉童,警方通過查閱死者的電腦和手機(jī)撇寞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔑担,你說我怎么就攤上這事牌废。” “怎么了啤握?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵鸟缕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我排抬,道長(zhǎng)懂从,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任蹲蒲,我火速辦了婚禮番甩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘届搁。我一直安慰自己缘薛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布卡睦。 她就那樣靜靜地躺著掩宜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪么翰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天辽旋,我揣著相機(jī)與錄音浩嫌,去河邊找鬼。 笑死补胚,一個(gè)胖子當(dāng)著我的面吹牛码耐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溶其,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼骚腥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了瓶逃?” 一聲冷哼從身側(cè)響起束铭,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厢绝,沒想到半個(gè)月后契沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔汉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年懈万,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡会通,死狀恐怖口予,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涕侈,我是刑警寧澤沪停,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站驾凶,受9級(jí)特大地震影響牙甫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜调违,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一窟哺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧技肩,春花似錦且轨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至然痊,卻和暖如春至朗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剧浸。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工锹引, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唆香。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓嫌变,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親躬它。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腾啥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,799評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)冯吓,斷路器倘待,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 那天,我和孫記者約在小鎮(zhèn)的茶樓見面桑谍。微風(fēng)輕撫我的臉龐延柠,帶來小鎮(zhèn)獨(dú)特的古香;南巷的木制風(fēng)車隨風(fēng)輕輕旋轉(zhuǎn)锣披,給稻田...
    墨楠鐘閱讀 215評(píng)論 0 1
  • 進(jìn)步是一點(diǎn)點(diǎn)來的 今天干了一件大事贞间,從蕭山市心廣場(chǎng)騎回了學(xué)校贿条,悠悠的騎,臉頰通紅增热,成了猴屁股整以。一路被他像趕著馬匹似...
    fangyuanjili閱讀 249評(píng)論 0 0
  • 對(duì)于不漂亮的姑娘公黑,或許從來很少幻想能遇到王子,她們只想過平常人的生活摄咆,安心的做自己的灰姑娘凡蚜。可是這個(gè)愿望一旦打破吭从,...
    楓紅云天閱讀 453評(píng)論 0 0