Yakim shu Hi, 這是我擴充腦內海馬體的地方。

[第四週] API 基礎 - RESTful API、JSON、curl 指令

API 是什麼?

全名為 Application Programming Interface,中文翻譯為「應用程式介面」

簡單來說就是方便溝通、交換資料的管道。

怎麼說方便溝通呢? 我自己覺得中國的翻譯:「接口」,比較容易想像。

就像是把家裡的 插頭 (開發者) 插進 插座(API)有電(資料交換)

而 API 有分很多種:

以網頁用的 Web API 來舉例,就像是對方定義好了插座的規格,我們只要照著規格、把形狀合適的插頭插上去,就可以得到我要的資料,而你不會知道資料是怎麼來的,就像你不知道電是怎麼傳過來的( 或許你知道 )

你只是呼叫 function 加上參數,就會得到一個結果,中間的商業邏輯與資料篩選是提供 API 的 Server 端來處理。

Web API 實際上最常應用的場景

一般來說,Web API 就是只透過 HTTP 協定的 API,有幾個常見的應用:

以網站來說,最常用的應該是登入系統,現在不管哪個網站,在會員登入頁,大部分都會有 Facebook 跟 Google 登入按鈕,這麼做對開發者、用戶、甚至是供應商,都是有利的狀況

一個好的 API 應該要有下列條件

參考資料:


RESTful API

現代 API 有一大部分都是走 RESTful 設計風格。

注意: 是一種廣泛流行的 API 設計規範、不是規定

「 非 」 RESTful API 長怎樣?

簡單設計一個非 RESTful 的 API,功能在於操作文章,可以看得出來 「 動詞是寫在 URL 」上。

改成 RESTful 風格又會長怎樣?

如果內容要做得非常 RESTful ,其實還滿嚴格的,我還沒深入研究。

但如果只是想要淺略了解的話,核心在於 request 要符合 「 語易化的動詞 Method 」 + 「 名詞 URL 」的格式,例如:

Huli 在課程舉了一個我認為很好理解的例子。

「 就像你寫網頁的時候,你也可以整個 html 檔案全部都用 div 標籤,但使用更有語意化的標籤( 例如sectionarticle ),可以更好從結構裡看出內容的作用。 」

CRUD 原則

也就是說,就算你只用 GETPOST 也可以達到以上功能,但充份善用 HTTP Method 可以讓開發者更快速地了解如何使用此 API,也符合 CRUD 原則的、分別是 Create (Post)、Read (Get)、Update (Put)、Delete (Delete),我們就把這種風格稱為 RESTful API。

參考資料:


資料格式 XML & JSON

常用的資料格式有兩種: XML、JSON

XML

以前傳資料的格式,現代開發比較少用

JSON

比起 XML 更輕量,為現代最普遍、常用的資料格式

實際來處理 JSON 格式

所以當我們發出一個 request,收到資料格式為 JSON 的 response 要怎麼處理呢?

一樣用 reqres.in 的 API 為例,請看以下程式碼:

const request = require('request');
request(`https://reqres.in/api/users/5`, function (error, response, body) {
  console.log('原始格式,JSON 格式的字串----------');
  console.log(body);
  console.log('轉成 JS 物件--------------------');
  console.log(JSON.parse(body));

如果只是把 response 的 body 印出來,會發現是「 JSON 格式 」的 「 字串 」,所以用內建的函式 JSON.parse(<JSON>) 做處理,就會轉成「 JS 物件 」

螢幕快照 2019-05-08 上午11.42.58

反過來說,如果想要把 「 JS 物件 」轉成「 JSON 格式的字串 」,可以用: JSON.stringify( <object> )

參考資料:


必學指令 curl

( 以下內容完全參考至這篇文章: Linux Curl Command 指令與基本操作入門教學,詳細又好懂,感謝! )

隨便看一個 Web API 文件,一定都會看到上面用 curl 示範如何發出正確的 request,因為此做法最簡單、沒有任何門檻,只要在終端機 ( Terminal ) 輸入指令就可以發 request!

雖然很簡單使用,但 curl 可是很強大的,支援發 HTTP request 、下載及上傳檔案的功能,基本格式為:

curl [options] [URL...]

預設是 GET 方法

簡單示範一下,用 curl 發 request 到 google 首頁

加上參數

常見 Restful CRUD 指令:

參考資料:


( 以上內容大部分是 程式導師實驗計畫第三期 的學習筆記,如有錯誤歡迎糾正,非常感謝 🤓 )