對PhalApi框架的抉擇

2018-11-21 10:23 更新

人類一思考,上帝就偷笑了。 -- 《下一個倒下的會不會是華為》

1.10.1 對PhalApi框架的抉擇

能使用框架來進(jìn)行項目開發(fā),和知道為何使用此框架進(jìn)行項目開發(fā)明顯不同。

對框架的選擇,名義上是架構(gòu)師的職責(zé),但對于充滿好奇心和有著更強(qiáng)求知欲的開發(fā)人員來說,同樣應(yīng)該給予關(guān)注。

之所以選擇一個框架進(jìn)行項目開發(fā),明顯可以減少很多不必要的重復(fù)編碼,但更深層次,則是可以減少開發(fā)周期、統(tǒng)一開發(fā)規(guī)范、降低項目風(fēng)險,不致于項目失控。

所以,在決定使用PhalApi框架前,對于此框架是否適用于即將啟動的項目進(jìn)行一番思索,是大有裨益的。通過 推定框架 ,有助于避免因采用不當(dāng)?shù)目蚣芏鴮椖吭斐刹槐匾淖枇Α?

1、適用的場景和項目

海量數(shù)據(jù)和移動App

此框架特別適用于現(xiàn)在各種 移動App項目的后臺接口開發(fā),以及服務(wù)器間的后臺接口開發(fā),同時具有應(yīng)對 海量數(shù)據(jù) 的能力。并且還可以掛靠多個項目,也可以很好地支持多個終端、開放不同的入口。

同時提供了可以很好應(yīng)對海量數(shù)據(jù)的解決方案:如沒有提供圖片上傳的代碼或工具而希望開發(fā)人員將圖片上傳到CDN,支持大數(shù)據(jù)的存儲,以及后臺計劃任務(wù)。

HTTP協(xié)議和JSON格式

基于此,我們采用了主流設(shè)計,即將框架設(shè)計成使用HTTP協(xié)議并JSON格式返回結(jié)果的接口請求,因為這能為大眾熟悉并潛意識接受。通過規(guī)范的接口調(diào)用和返回,有利于客戶端和后臺開發(fā)人員的關(guān)系融洽。

2、敏捷開發(fā)和快速交付

雖然框架和工程實踐間沒有必然的聯(lián)系,但這其中有一些微妙的關(guān)系。

一種代碼編寫的方式會形成一種開發(fā)的風(fēng)格;一種開發(fā)風(fēng)格會奠定一個團(tuán)隊的合作氛圍;一個團(tuán)隊的合作氛圍會決定項目交付的質(zhì)量。

而PhalApi所提倡和希望做到的正是通過讓后臺接口開發(fā)更簡單以讓后臺開發(fā)人員心情更愉悅,從而為客戶端提供高質(zhì)量穩(wěn)定的接口以支撐更多優(yōu)質(zhì)App的開發(fā)。并且,結(jié)合重構(gòu)、測試驅(qū)動開發(fā)和持續(xù)集成等,可以讓你的項目如虎添翼,在快速交付的同時,體驗編碼開發(fā)的樂趣。

3、約束和關(guān)注

架構(gòu)約束程序。

約束有時會讓開發(fā)者處處受阻。但好的約束能夠統(tǒng)一規(guī)范而不致于項目代碼凌亂不堪,也不會輕易地允許低級開發(fā)新手犯下一些本可避免的BUG。正如,我們都討厭等待紅綠燈,但我們必須肯定它對交通和生命安全保障的作用。

4、復(fù)雜領(lǐng)域業(yè)務(wù)的應(yīng)對和解決方案

正如前面說到的,我們關(guān)注在海量數(shù)據(jù)下為移動App提供穩(wěn)定的接口,我們提倡敏捷開發(fā)下的快速交付。所以我們?nèi)サ襞c接口開發(fā)無關(guān)的功能,沒有提供視圖渲染和模板解析的操作。

但只是這樣而已嗎?

不!我們還關(guān)注對復(fù)雜領(lǐng)域業(yè)務(wù)的應(yīng)對和解決方案。

如果我們PhalApi框架所關(guān)注的,也是你們項目所關(guān)注的,那么我們有理由相信PhalApi能為你的項目帶來很多友好的約束和貼心的幫助。

5、框架的性能

很多框架都要強(qiáng)調(diào)其能提供的性能,然后PHP本身就是動態(tài)的腳本語言,要想提高項目的運(yùn)行速度,就是要進(jìn)行減法,即減少不必要的PHP代碼。但是前面強(qiáng)調(diào)性能的框架則做了與其承諾矛盾的做法:為框架增添了很多項目可能不需要用到的功能。明顯地就是一系列既定的執(zhí)行流程和偵聽事件、回調(diào)、調(diào)度等等。
而這些,勢必會對性能有所影響,特別當(dāng)應(yīng)用項目不需要這些特性卻又不能定制簡化時,框架所謂的強(qiáng)悍功能會適得其反。

對于這一塊,我們則提供了極大的空間。因為,入口的文件,由你指定。除了一些必要的加載外,很多都可以支持自定義和定制化。

而且我們也使用autobench進(jìn)行了壓力測試和通過xhprof進(jìn)行了性能剖析,證明PhalApi框架在性能上確實如我們預(yù)料的那樣 -- 快!

6、PhalApi的成熟度、部署與學(xué)習(xí)成本

成就度

不可否認(rèn),PhalApi還是太年輕了。

PhalApi正式開源于2015年1月,但是我們在努力完善中并致力于有助于快速開發(fā)的后臺接口。我們“減少不必要的創(chuàng)新”,我們堅持恒星一般的接口并很好地支持框架升級, 我們盡量提供優(yōu)秀的文檔和及時的溝通幫助。

更為重要的是,這是一個不只為框架而框架的PhalApi框架。

如果在開發(fā)過程中對所遇到的問題而框架不能很好解決和支持時,可以考慮改寫框架,將某一目標(biāo)或?qū)傩蕴嵘良軜?gòu),其他團(tuán)隊成員則無須再編寫重復(fù)代碼去重復(fù)實現(xiàn)。因為,你會發(fā)現(xiàn),在PhalApi下,你可以輕松做到這一點(diǎn): 小步快跑下的浮現(xiàn)式設(shè)計

部署

在Nginx下,你可以快速部署此框架。

以下是為初學(xué)者參考的Nginx配置:

server {
    listen       80;
    server_name  demo.phalapi.com;

    root   /home/apps/projects/demo.phalapi.com/Public;

    charset utf-8;

    access_log  logs/demo.phalapi.com.access.log;
    error_log  logs/demo.phalapi.com.error.log;

    location / {
        index  index.html index.htm index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

除此之前,我們已經(jīng)對框架的結(jié)構(gòu)目錄進(jìn)行了很好地劃分。包括配置文件、日志文件、框架代碼、多個項目掛靠、不同的入口開放以及多App的支持等等。

在結(jié)合Phing進(jìn)行一鍵發(fā)布時,你會發(fā)現(xiàn),項目的部署發(fā)布同樣方便快捷。

學(xué)習(xí)成本

這塊學(xué)習(xí)成本是不可避免的,畢竟PhalApi是一個新的框架,很多開發(fā)同學(xué)之前都沒有接觸過。

但我們盡量站在后臺開發(fā)同學(xué)的角度,用心地設(shè)計每一個接口,編寫每一行代碼。在源代碼里面傾注了必要的注釋和使用示例,并同步提供了詳細(xì)的文檔說明和實戰(zhàn)代碼,以便快速入門上手。

更為重要的是,我們都是盡可能按照主流慣例來設(shè)計接口規(guī)范,以便各位同學(xué)可以快速上手,就仿佛這個框架是出自你的設(shè)計一樣。

1.10.2 何時可以采用PhalApi?

我們致力于提供可以快速開發(fā)后臺接口的框架,并希望能對你的項目有實際的幫助。所以,我們不會鼓吹PhalApi框架,因為沒有可以適用于任何領(lǐng)域、任何實際項目的框架。也就是沒有所謂的銀彈,也沒有一種放之四海而皆準(zhǔn)的方法,起碼你可能需要作一些調(diào)整。

而且,我們也不會贊同你不加考慮就采用PhalApi框架,因為如果此框架不利于你項目的開發(fā),甚至有反作用,這顯然有悖于我們的初心:為你的項目提供實質(zhì)的幫助。因此,在采用PhalApi框架前,你應(yīng)該稍微查看一下我們的文檔,和相關(guān)的源代碼。以下是一些初步的建議。

 1、架構(gòu)無關(guān):如果你的只是小項目,無需要過多考慮涉及大規(guī)模決策、各模塊及元素、屬性間的微妙關(guān)系,即架構(gòu)無關(guān)時。
PhalApi和其他框架一樣,也能滿足小項目的開發(fā)需求。  

 2、專注架構(gòu):如果你需要專注框架,則更需要理解你項目將面臨的約束、風(fēng)險和需要滿足的質(zhì)量屬性。
然后評估PhalApi是否能統(tǒng)一這此約束、降低風(fēng)險并滿足這些質(zhì)量屬性。若能,則用之;若不能,則另取之。  

 3、提升架構(gòu):最后,如果你發(fā)現(xiàn)PhalApi擁有不斷演進(jìn)的能力并有助于浮現(xiàn)式設(shè)計(我們也正是如此設(shè)計和研發(fā)的),并且愿意
將PhalApi框架提升到你們產(chǎn)品線的后臺接口框架,那么你將能為你的團(tuán)隊、項目乃至公司提供一個更優(yōu)質(zhì)的框架,并會為之感到興奮和驕傲。
當(dāng)然,“能力越大,責(zé)任也就越大”。但我們作為程序員,不正是希望能以已之所學(xué),服務(wù)于人嗎?

1.10.3 何時不應(yīng)該使用PhalApi?

正如其他負(fù)責(zé)任的開源框架一樣,我們在說明PhlaApi框架適用場景的同時,也應(yīng)該指明不應(yīng)該使用PhalApi的時機(jī)。其中包括但不限于:

  • 需要開發(fā)CLI項目時
  • 需要開發(fā)網(wǎng)站項目,即有界面展示和視圖渲染;
  • 對數(shù)據(jù)嚴(yán)謹(jǐn)性要求高,如金融行業(yè)的相關(guān)項目,畢竟PHP是弱類型語言;
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號