這是本文件的舊版!


Rest API

原本就有接觸過Facebook Graph API,因工作關係接觸到Rest,所以學習起來比較不陌生。因為網路資料相當豐富,我只記錄些自己容易忘記的部分。

HTTP Delete與Put操作可能會被防火牆阻擋,經過Study有三種替代方案。

  1. Http POST + method=delete: 增加method參數去描述行為。(可參考Spring的HiddenHttpMethodFilter)
  2. Http POST + {id}/delete: 在URI多增加操作。
  3. Request with Header X-HTTP-Method-Override=DELETE: 透過Header置換操作。(參考link)

個人覺得第三種做法比較正規些,目前知道firebaseoracle的OMCABIBM Business Process Manager都用這做法。

Hypermedia Control

Richardson Maturity Model所定義的等級3。主要有兩個好處:

  1. 如果使用者是根據Hypermedia link做操作,Server是可以自行修改URI而不需要通知使用者。
  2. 使用者可以根據Hypermedia link知道: 接下來可以做什麼。

而Richardson提到,Hypermedia link該怎麼呈現並沒有一定規範,他是使用rel描述關係,uri描述連結的方式:

<link rel = "/linkrels/appointment/cancel"
        uri = "/slots/1234/appointment"/>
<link rel = "/linkrels/appointment/addTest"
        uri = "/slots/1234/appointment/tests"/>
<link rel = "self"
        uri = "/slots/1234/appointment"/>
以Richardson的方法而言,他的rel也表達了對應動作。換成PayPal REST Payment API的例子:
"links" : [{
   "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-2XR800907F429382MKEBWOSA",
   "rel" : "self",
   "method" : "GET"
  }, {
   "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-2XR800907F429382MKEBWOSA/execute",
   "rel" : "update",
   "method" : "POST"
  }
 ]
PayPal則是多了method去表達對應的HTTP request。

Basic

Transaction

Client

Spring