API,全名為 Application Programming Interface,翻作應用程式介面。之前對 API 的概念就是要去某個地方拿要的東西,當人問起「API 是什麼啊?」,也不知道怎麼說明。
在看了《[NET101] 網路基礎概論(搭配 JS 實作練習)》和〈從拉麵店的販賣機理解什麼是 API〉後,粗略了整理下什麼是 API,為什麼要有 API 等相關筆記。
什麼是 API?為什麼要有 API?
API 主要是提供介面讓雙方可以交換資料。
因為想要使用對方的資料或功能,但又不可能把整個資料庫都給出去,除了可能會洩漏使用者個人資訊,或可能讓資料庫被外部干擾造成問題,所以只能透過有開放的功能拿取資料。
如下圖,小綠想直接去小藍的箱子裡拿東西是不行的,因為會弄亂箱子裡的東西,也可能會翻到小藍不為人知的祕密。所以小藍就告訴小綠他只能透過有釋出的資料拿他要的資訊。雖然小綠覺得小藍很小氣,但還是可以透過釋出的資料把他原本想從小藍箱子裡直接翻找的東西串到自己的箱子。
Web API
API 其實不僅限於在網路上才能使用,程式語言也會透過作業系統有開放的 API 交換資料。而需要透過網路交換資料,就叫做 Web API。主要透過 HTTP 協定交換資料,但也可以自定義交換資料,不一定都要建立在 HTTP 上。
Web API 要做的事情是:
- 從資料庫撈取要公開的功能/ 資料,並按格式輸出。
- Where:需提供網址,告訴使用者 API 在哪裡。
- How:需提供文件,說明如何使用公開的 API。
資料格式
- 純文字和自定義格式
- XML: Extensible Markup Language
- 長得像 HTML,以標籤屬性形式表現資料
- JSON: JavaScript Object Notation
- 和 JavaScript 相容性好,為目前的主流
- 長得像 JavaScript 的 Object
JSON.parse()
:可將 JSON 格式的字串轉成 JavaScript 的 ObjectJSON.stringify(obj)
:把 Object 轉成 JSON 格式的字串
RESTful
不是協定,而是一種「風格」,希望使用者可以以統一標準使用 API。
擷取自上述 [NET101] 課程。
好用指令
curl <網址>
:發一個 Request 到網址去,就會返回它的 Response。
curl -I <網址>
:只要 Response 的 Header。
nslookup
:解析 Domain 的 IP 位置。
ping <網址>
:測試是否可連到網址。
telnet <IP port>
:去 ping 一個指定的 port,看該 port 有沒有開,也可以拿來傳資料。