Laravel x REST API x AWS

實務分享

講者:Seta Chuang(桐生曉月)



Summary

  • 認識 REST  &  API

  • 選擇一個適合你的語言及框架

  • AWS 架構規劃佈局

  • REST API 踩雷心得

  • Q&A
  • 認識 REST API

    • 簡單透過HTTP網址來取得或控制資源

    • 前後端分離的時代

    • AJAX & SPA & Mobile

    • 了解SOAP後你會更愛REST

    • 世界主流趨勢

    Planing a REST api

    • 先了解前端的需求
    • 規劃 End Point 即URI 
    • 範例
      使用者註冊:/user(資源)/create(動作)
      刪除留言編號12:/message(資源)/delete(動作)/12(參數1)
      修改書本資料:/book(資源)/update(動作)
      查詢今天訂單:/order(資源)/search(動作)/2014-08-27(參數1)

    • 迷思1:可否用 QueryString?
    • 答:我個人是會帶但要注意字元encode及長度限制

    • 迷思2:一定要用PUT OR DELETE...這些METHOD?
    • 答:其實不用也沒關係,我個人只用GET或POST

    BOOK

    今天沒辦法說很多,所以先推薦好書

    https://leanpub.com/build-apis-you-wont-hate

    本書使用Laravel做範例

    評估與選擇

    NodeJS on Many、Ruby on Rail、PHP on Laravel
    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

    Laravel 的好處

    1. 路由控制簡單方便
      Route::controller('user', 'UserController');
      Route::get('list/{first?}/{second?}/{third?}', array('uses' => 'ListController@index'));

    2. Json 的處理內建直接陣列轉Json輸出
      return Response::json

    3. Composer Package 完整強大,縮短開發時程

    4. 架構簡單清楚好維護

    5. PHP 5.4以後已經不是以前的PHP了..

    AWS佈局規劃


    AWS相關服務說明

    1. EC2:Web Server,用來當作API伺服器安裝Apache、PHP,可Auto Scaling或 Load Balancer作負載平衡很好用

    2. RDS:MySQL資料庫,直接設定即可使用缺點是很貴

    3. ElastiCache:快取伺服器,redis、memcached

    4. S3:檔案伺服器,存放各種圖片、靜態檔案

    5. CloudFront:CDN伺服器,配合S3加速全球各地使用場的反應速度(也可直接指定LoadBalancer加速API)

    AWS相關服務說明

  • SQS:Queue(佇列)伺服器,Background運算的好幫手,上傳縮圖、寄信、推播、產報表...

  • CloudSearch:搜尋引擎無痛使用

  • Route53:DNS伺服器

  • 環境設定

    1. bootstrap/start.php 設定開發、測試、正式環境

    2. config/ 設定Database、Email、Queue、Cache,並且將開發、測試、正式環境設定分開

    3. composer.json 安裝設定你需要的package
      注意:vendor請加到Git忽略清單


    接下來的事

    1. API 不講 MVC 因為 他只有 M與 C ,V是前端的事

    2. 淺談使用者登入,與 API 資料驗證

    3. 淺談 REST API 的 自動化測試


    經驗分享 1

    CORS
    發生問題:前端或行動端在存取API時,因為跨站提出HTTP的Request當伺服端沒有允許時前端就會錯誤

    解決方法:
    在Header加

    Access-Control-Allow-Origin
    Access-Control-Allow-Methods

    使用 barryvdh/laravel-cors


    經驗分享2

    OAuth2
    發生問題:
    要與Facebook或其他社群網站串接會員系統時,OAuth的流程要在前端還是後端處理?

    解決辦法:
    建議:以Facebook為例,由前端或行動端與Facebook完成OAuth2授權後將Token傳給後端,後端在以Token Access Facebook API進行資料驗證,

    經驗分享3

    Pagination
    發生問題:

    之前MVC都有人寫好的Pagination可以使用,API要如何與前端處理分頁呢?

    解決方法:
    透過API丟頁數與筆數讓API回傳目前頁面的資料並回傳總筆數,剩下的由前端處理

    例:/book/list?page=2&limit=10
    回傳:{total:96,data:{["name":"test"],["name":"test2"],....}}

    經驗分享4

    Error Response
    發生問題:
    API在發生錯誤的時後要如何處理呢? 又要回給前端什麼樣的訊息?

    解決方法:
    1. API基本上千萬別發生 500 Error,前端或行動端會直接閃退或javascript error,所以TryCatch很重要

    2. 有handle到Error時,要定Error Code回200的Json訊息給前端 如:{"status":"error","msg":"user not found"}

    3. 錯誤請記Log file

    經驗分享5

    Security
    1. SQL Injection => 盡量使用ORM與資料驗證

    2. XSS => 資料驗證 Laravel有強大的 validation

    3. DDoS =>善用快取及負載平衡剩下就交給AWS跟祈禱

    4. 被Try => API要做權限管控,一般使用者只可以取得自已相關資料,盡量使用HTTPS防止資料被側錄,Token的時間長短管控



    Q&A

    Made with Slides.com