_人類一思考,上帝就偷笑了。 -- 《下一個倒下的會不會是華為》_
##1.10.1 對PhalApi框架的抉擇##
能使用框架來進行項目開發,和知道為何使用此框架進行項目開發明顯不同。
對框架的選擇,名義上是架構師的職責,但對于充滿好奇心和有著更強求知欲的開發人員來說,同樣應該給予關注。
之所以選擇一個框架進行項目開發,明顯可以減少很多不必要的重復編碼,但更深層次,則是可以減少開發周期、統一開發規范、降低項目風險,不致于項目失控。
所以,在決定使用PhalApi框架前,對于此框架是否適用于即將啟動的項目進行一番思索,是大有裨益的。通過 **推定框架** ,有助于避免因采用不當的框架而對項目造成不必要的阻力。
###1、適用的場景和項目###
####海量數據和移動App####
此框架特別適用于現在各種 **移動App**項目的后臺接口開發,以及服務器間的后臺接口開發,同時具有應對 **海量數據** 的能力。并且還可以掛靠多個項目,也可以很好地支持多個終端、開放不同的入口。
同時提供了可以很好應對海量數據的解決方案:如沒有提供圖片上傳的代碼或工具而希望開發人員將圖片上傳到CDN,支持大數據的存儲,以及后臺計劃任務。
####HTTP協議和JSON格式####
基于此,我們采用了主流設計,即將框架設計成使用HTTP協議并JSON格式返回結果的接口請求,因為這能為大眾熟悉并潛意識接受。
通過規范的接口調用和返回,有利于客戶端和后臺開發人員的關系融洽。
###2、敏捷開發和快速交付###
雖然框架和工程實踐間沒有必然的聯系,但這其中有一些微妙的關系。
**一種代碼編寫的方式會形成一種開發的風格;一種開發風格會奠定一個團隊的合作氛圍;一個團隊的合作氛圍會決定項目交付的質量。**
而PhalApi所提倡和希望做到的正是通過讓后臺接口開發更簡單以讓后臺開發人員心情更愉悅,從而為客戶端提供高質量穩定的接口以支撐更多優質App的開發。并且,結合重構、測試驅動開發和持續集成等,可以讓你的項目如虎添翼,在快速交付的同時,體驗編碼開發的樂趣。
###3、約束和關注###
**架構約束程序。**
約束有時會讓開發者處處受阻。但好的約束能夠統一規范而不致于項目代碼凌亂不堪,也不會輕易地允許低級開發新手犯下一些本可避免的BUG。正如,我們都討厭等待紅綠燈,但我們必須肯定它對交通和生命安全保障的作用。
###4、復雜領域業務的應對和解決方案###
正如前面說到的,我們關注在海量數據下為移動App提供穩定的接口,我們提倡敏捷開發下的快速交付。所以我們去掉與接口開發無關的功能,沒有提供視圖渲染和模板解析的操作。
但只是這樣而已嗎?
不!我們還關注對復雜領域業務的應對和解決方案。
如果我們PhalApi框架所關注的,也是你們項目所關注的,那么我們有理由相信PhalApi能為你的項目帶來很多友好的約束和貼心的幫助。
###5、框架的性能###
很多框架都要強調其能提供的性能,然后PHP本身就是動態的腳本語言,要想提高項目的運行速度,就是要進行減法,即減少不必要的PHP代碼。但是前面強調性能的框架則做了與其承諾矛盾的做法:為框架增添了很多項目可能不需要用到的功能。明顯地就是一系列既定的執行流程和偵聽事件、回調、調度等等。
而這些,勢必會對性能有所影響,特別當應用項目不需要這些特性卻又不能定制簡化時,框架所謂的強悍功能會適得其反。
對于這一塊,我們則提供了極大的空間。因為,入口的文件,由你指定。除了一些必要的加載外,很多都可以支持自定義和定制化。
而且我們也使用autobench進行了壓力測試和通過xhprof進行了性能剖析,證明PhalApi框架在性能上確實如我們預料的那樣 -- 快!
###6、PhalApi的成熟度、部署與學習成本###
####成就度####
不可否認,PhalApi還是太年輕了。
PhalApi正式開源于2015年1月,但是我們在努力完善中并致力于有助于快速開發的后臺接口。我們“減少不必要的創新”,我們堅持恒星一般的接口并很好地支持框架升級, 我們盡量提供優秀的文檔和及時的溝通幫助。
更為重要的是,這是一個不只為框架而框架的PhalApi框架。
如果在開發過程中對所遇到的問題而框架不能很好解決和支持時,可以考慮改寫框架,將某一目標或屬性提升至架構,其他團隊成員則無須再編寫重復代碼去重復實現。因為,你會發現,在PhalApi下,你可以輕松做到這一點: **小步快跑下的浮現式設計** 。
####部署####
在Nginx下,你可以快速部署此框架。
以下是為初學者參考的Nginx配置:
```javascript
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;
}
}
```
除此之前,我們已經對框架的結構目錄進行了很好地劃分。包括配置文件、日志文件、框架代碼、多個項目掛靠、不同的入口開放以及多App的支持等等。
在結合Phing進行一鍵發布時,你會發現,項目的部署發布同樣方便快捷。
####學習成本####
這塊學習成本是不可避免的,畢竟PhalApi是一個新的框架,很多開發同學之前都沒有接觸過。
但我們盡量站在后臺開發同學的角度,用心地設計每一個接口,編寫每一行代碼。在源代碼里面傾注了必要的注釋和使用示例,并同步提供了詳細的文檔說明和實戰代碼,以便快速入門上手。
更為重要的是,我們都是盡可能按照主流慣例來設計接口規范,以便各位同學可以快速上手,就仿佛這個框架是出自你的設計一樣。
##1.10.2 何時可以采用PhalApi?##
我們致力于提供可以快速開發后臺接口的框架,并希望能對你的項目有實際的幫助。所以,我們不會鼓吹PhalApi框架,因為沒有可以適用于任何領域、任何實際項目的框架。也就是沒有所謂的銀彈,也沒有一種放之四海而皆準的方法,起碼你可能需要作一些調整。
而且,我們也不會贊同你不加考慮就采用PhalApi框架,因為如果此框架不利于你項目的開發,甚至有反作用,這顯然有悖于我們的初心:為你的項目提供實質的幫助。因此,在采用PhalApi框架前,你應該稍微查看一下我們的文檔,和相關的源代碼。以下是一些初步的建議。
```
1、架構無關:如果你的只是小項目,無需要過多考慮涉及大規模決策、各模塊及元素、屬性間的微妙關系,即架構無關時。
PhalApi和其他框架一樣,也能滿足小項目的開發需求。
2、專注架構:如果你需要專注框架,則更需要理解你項目將面臨的約束、風險和需要滿足的質量屬性。
然后評估PhalApi是否能統一這此約束、降低風險并滿足這些質量屬性。若能,則用之;若不能,則另取之。
3、提升架構:最后,如果你發現PhalApi擁有不斷演進的能力并有助于浮現式設計(我們也正是如此設計和研發的),并且愿意
將PhalApi框架提升到你們產品線的后臺接口框架,那么你將能為你的團隊、項目乃至公司提供一個更優質的框架,并會為之感到興奮和驕傲。
當然,“能力越大,責任也就越大”。但我們作為程序員,不正是希望能以已之所學,服務于人嗎?
```
##1.10.3 何時不應該使用PhalApi?##
正如其他負責任的開源框架一樣,我們在說明PhlaApi框架適用場景的同時,也應該指明不應該使用PhalApi的時機。其中包括但不限于:
+ 需要開發CLI項目時
+ 需要開發網站項目,即有界面展示和視圖渲染;
+ 對數據嚴謹性要求高,如金融行業的相關項目,畢竟PHP是弱類型語言;
- 歡迎使用PhalApi!
- 接口,從簡單開始!
- [1.1]-下載與安裝
- [1.2]-創建一個自己的項目
- [1.3]-在線體驗
- [1.4]-文檔、幫助和官網
- [1.10]-對PhalApi框架的抉擇
- [1.11]-快速入門(backup)
- [1.12]-參數規則:接口參數規則配置
- [1.13]-統一的接口請求方式:_sevice=XXX.XXX
- [1.14]-統一的返回格式和結構:ret-data-msg
- [1.15]-數據庫操作:基于NotORM的使用及優化
- [1.16]-配置讀取:內外網環境配置的完美切換
- [1.17]-日記紀錄:簡化版的日記接口
- [1.18]-快速函數:人性化的關懷
- [1.19]-DI服務速查:各資源服務一覽表
- [1.20]-DB操作:數據庫基本操作速查
- [1.21]-類的自動加載:遵循PEAR包的命名規范
- [1.22]-簽名驗證:自定義簽名規則
- [1.23]-請求和響應:GET和POST兩者皆可得及超越JSON格式返回
- [1.24]-緩存策略:更靈活地可配置化的多級緩存
- [1.25]-國際化翻譯:為走向國際化提前做好翻譯準備
- [1.26]-數據安全:數據對稱加密方案
- [1.27]-精益開發:更富表現力的Model層和重量級數據獲取的應對方案
- [1.28]-COOKIE:對COOKIE原生態的支持及記憶加密升級版
- [1.29]-開放與封閉:多入口和統一初始化
- [1.30]-保持的力量:接口開發最佳實踐
- [1.31]-新型計劃任務:以接口形式實現的計劃任務
- [2.11]-核心思想:DI依賴注入-讓資源更可控
- [2.12]-海量數據:可配置的分庫分表
- [2.13]-接口調試:在線SQL語句查看與性能優化
- [2.14]-測試驅動開發:意圖導向編程下的接口開發
- [2.15]-演進:新型計劃任務續篇
- [2.16]-領域驅動設計:應對復雜領域業務的Domain層
- [2.17]-微服務:Api接口服務層
- [2.18]-定制化:資源服務的再實現
- [2.19]-擴展庫:可重用的擴展類庫
- [2.20]-約定編程:架構明顯的編程風格
- [2.21]-服務器統一部署方案簡明版:CentOs---Nginx---php-fpm---MySql-[--Memcached]
- [2.22]-更多工具:精益項目和團隊建設
- [3.1]-擴展類庫:微信開發
- [3.2]-擴展類庫:代理模式下phprpc協議的輕松支持
- [3.3]-擴展類庫:基于PHPMailer的郵件發送
- [3.4]-擴展類庫:優酷開放平臺接口調用
- [3.5]-擴展類庫:七牛云存儲接口調用
- [3.6]-擴展類庫:新型計劃任務
- [3.8]-擴展類庫:用戶、會話和第三方登錄集成
- [3.9]-擴展類庫:swoole支持下的長鏈接和異步任務實現
- [3.11]-擴展類庫:基于FastRoute的快速路由
- [4.2]-開發實戰2:模擬優酷開放平臺接口項目開發
- [4.3]-開發實戰3:一個簡單的小型項目開發(奔跑吧兄弟投票活動)
- [5.1]-架構與思想:PhalApi核心設計和思想解讀
- [5.2]-雜談:扯一些PhalApi的前世和今生
- [5.3]-框架總結:術語表和PHP開發建議
- [5.4]-許可
- [5.5]-聯系和加入我們
- [5.6]-更新日記
- [5.8]-致框架貢獻者:加入PhalApi開源指南
- [6.1]-基于接口查詢語言的SDK包
- [6.2]-SDK包(JAVA版)
- [6.3]-SDK包(PHP版)
- [6.4]-SDK包(Objective-C版)
- [6.5]-SDK包(javascript版)
- [6.6]-SDK包(Ruby版)
- [8.1]-PhalApi視頻教程
- 附錄1:接口文檔參考模板