這是本文件的舊版!
Rest API
Introduction
原本就有接觸過Facebook Graph API,因工作關係接觸到Rest,所以學習起來比較不陌生。因為網路資料相當豐富,我只記錄些自己容易忘記的部分。
Articles
- Http Method無法表達出某些動作 (施工中)
Firewall issue of HTTP Delete & Put operations
HTTP Delete與Put操作可能會被防火牆阻擋,經過Study有三種替代方案。
- Http POST + method=delete: 增加method參數去描述行為。(可參考Spring的HiddenHttpMethodFilter)
- Http POST + {id}/delete: 在URI多增加操作。
- Request with Header X-HTTP-Method-Override=DELETE: 透過Header置換操作。(參考link)
個人覺得第三種做法比較正規些,目前知道firebase、oracle的OMCAB與IBM Business Process Manager都用這做法。
Terms
Hypermedia Control
Richardson Maturity Model所定義的等級3。主要有兩個好處:
- 如果使用者是根據Hypermedia link做操作,Server是可以自行修改URI而不需要通知使用者。
- 使用者可以根據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。
Resource
- using-oauth-to-protect-internal-rest-api studying..