Item | NodeJS | RoR | Laravel |
Package | NPM | GEM | Composer |
Routing | Express | Built-in | Built-in |
ORM | Node ORM2 | Built-in | Built-in |
Database Support | MySQL、Mongo、Memcache | MYSQL、Mongo、Memcache | MYSQL、Mongo、Memcache |
Basic Helper | Need Install | V | V |
Community | NodeJS.tw | ihower.tw | Laravel.tw |
Summuary | Too Light | Ruby不熟 | Winner |
- 路由控制簡單方便
Route::controller('user', 'UserController');
Route::get('list/{first?}/{second?}/{third?}', array('uses' => 'ListController@index'));
- Json 的處理內建直接陣列轉Json輸出
return Response::json
- Composer Package 完整強大,縮短開發時程
- 架構簡單清楚好維護
- PHP 5.4以後已經不是以前的PHP了..
- EC2:Web Server,用來當作API伺服器安裝Apache、PHP,可Auto Scaling或 Load Balancer作負載平衡很好用
- RDS:MySQL資料庫,直接設定即可使用缺點是很貴
- ElastiCache:快取伺服器,redis、memcached
- S3:檔案伺服器,存放各種圖片、靜態檔案
- CloudFront:CDN伺服器,配合S3加速全球各地使用場的反應速度(也可直接指定LoadBalancer加速API)
SQS:Queue(佇列)伺服器,Background運算的好幫手,上傳縮圖、寄信、推播、產報表...
CloudSearch:搜尋引擎無痛使用
Route53:DNS伺服器
- bootstrap/start.php 設定開發、測試、正式環境
- config/ 設定Database、Email、Queue、Cache,並且將開發、測試、正式環境設定分開
- composer.json 安裝設定你需要的package
注意:vendor請加到Git忽略清單
- API 不講 MVC 因為 他只有 M與 C ,V是前端的事
- 淺談使用者登入,與 API 資料驗證
- 淺談 REST API 的 自動化測試
發生問題:前端或行動端在存取API時,因為跨站提出HTTP的Request當伺服端沒有允許時前端就會錯誤
解決方法:
在Header加
Access-Control-Allow-OriginAccess-Control-Allow-Methods使用 barryvdh/laravel-cors
發生問題:要與Facebook或其他社群網站串接會員系統時,OAuth的流程要在前端還是後端處理?
解決辦法:
建議:以Facebook為例,由前端或行動端與Facebook完成OAuth2授權後將Token傳給後端,後端在以Token Access Facebook API進行資料驗證,
發生問題:
之前MVC都有人寫好的Pagination可以使用,API要如何與前端處理分頁呢?
解決方法:透過API丟頁數與筆數讓API回傳目前頁面的資料並回傳總筆數,剩下的由前端處理例:/book/list?page=2&limit=10回傳:{total:96,data:{["name":"test"],["name":"test2"],....}}
發生問題:API在發生錯誤的時後要如何處理呢? 又要回給前端什麼樣的訊息?解決方法:
1. API基本上千萬別發生 500 Error,前端或行動端會直接閃退或javascript error,所以TryCatch很重要
2. 有handle到Error時,要定Error Code回200的Json訊息給前端 如:{"status":"error","msg":"user not found"}
3. 錯誤請記Log file
1. SQL Injection => 盡量使用ORM與資料驗證2. XSS => 資料驗證 Laravel有強大的 validation3. DDoS =>善用快取及負載平衡剩下就交給AWS跟祈禱
4. 被Try => API要做權限管控,一般使用者只可以取得自已相關資料,盡量使用HTTPS防止資料被側錄,Token的時間長短管控