伺服器端 API 與 Ajax API 實作需求設計差異須知

segmentfault上的一個有趣問題
昨天在 segmentfault 上看到了一個問題挺有趣的, 由於這個月很多事情全都擠在一起, 沒時間寫下任何東西, 只好借花獻佛的延伸, 同時小小改變了原本的問題發表在這, 期待能有些許討論的火花產生。

雖然題目寫的好像是個有豐富經驗的解決文章, 但其實是希望能夠騙到各位前輩的經驗來讓這篇文章更加完備, 畢竟以我這不靈光的小小腦袋瓜, 的確還想不太出更高深的東西。

問題: 伺服器端 API 與 Ajax API 實作需求設計差異?


跟 Achi 隨便用一分鐘啦賽討論了一下, 列了兩個想到的差異:
  1. 認證 (Authentication): 使用 Ajax 的 API 在認證時可以額外直接採用 session 來進行驗證, 當然也可以採取 OAuth2 來認證, 不過用 session 就直接驗證不失一個簡便的好方法。API 呼叫來源也是個需要稍微注意一下的設計要點, 可以參考一下 fb 的 JavaScript SDK。
  2. 跨網域: 在設計利用 Ajax 可以使用的 API 時, 跨網域的設計通常需要被考量到, 因此在設計中有時需要加入 jsonp 的 callback 函數支援。
除了上述兩點之外, 設計專為 Ajax 使用的 API 應該與伺服器端使用的 API 差不多, 像是安全性、RESTful ( REST 是不是最好的 HTTP API 設計) 等等, 但是那些範疇就不在這篇文章的討論範圍內了, 如果您覺得還有其他差異, 歡迎各位前輩先進們幫忙留言補充, 我會陸續在文章中補上。

相關問題: 伺服器端該如何判斷來源是 Ajax 還是一般來源的請求呢?


現在大部分的瀏覽器在傳送 Ajax 的請求時, 都會在送出請求的 Header 中加一個 HTTP_X_REQUESTED_WITH, 所以其實簡單的判斷 Header 裡有沒有這個 Key 的存在, 就可以粗略的判斷是不是 Ajax 的請求了。

留言