iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
DevOps

在後端漫遊,基礎N大建設系列 第 3

Day03 原來這就是傳說中的API!

伺服器不僅僅只是顯示檔案

第二天我們稍微提到「網頁伺服器」可以顯示電腦裡的目錄,還可以顯示檔案的內容,與我們一般用電腦開啟word、ppt看報告一樣。
進階一點,我們借助瀏覽器的強大功能,就可以透過HTML靜態網頁去顯示美美的頁面、CSS樣式、JS動畫特效,並使用視訊鏡頭音訊麥克風、GPS...等WebAPI。
看到這裡,原來一個伺服器,竟然就可以做到這麼多功能!難怪現代越來越多方便的線上服務了。
這也要讚嘆前人們努力結果,所謂的前人種樹後人乘涼。/images/emoticon/emoticon32.gif

不過昨天才講到網頁、檔案而已,怎麼上頭已經出現什麼API!這是什麼呀!?/images/emoticon/emoticon16.gif

ps. 若還沒閱讀過昨天的文章,這邊有[傳送門]


什麼是API?

以下範例的程式碼可以在這邊下載

老樣子,我們先搜尋一下維基百科好了。

根據維基百科解釋
應用程式介面(英語:Application Programming Interface),縮寫為API,是一種計算介面,它定義了多個軟體中介之間的互動。它定義了可以進行的呼叫(call)或請求(request)的種類,如何進行呼叫或發出請求,應使用的資料格式,應遵循的慣例等。

好吧,這解釋看起來可能還是還是很抽象。沒錯!API本身就是一個抽象的東西,因為他只是一種溝通方式的名詞。
舉生活例子來說,白先生與黑小姐偶然在一場會議認識,並且相談甚歡,散場後說我們保持聯絡。
但是怎麼「聯絡」呢?其實我們可以說「聯絡」是一個API,讓白先生可以呼叫(call)黑小姐。
但是「聯絡」需要透過打電話、寫信、傳簡訊,還是透過視訊...等哪一種方式呢?其實這些方式都可以,只要能聯絡得到。
而這些方式要怎麼選用呢?就單純看白先生與黑小姐囉/images/emoticon/emoticon37.gif

所以我們知道API伺服器也是如同上面的概念,兩家不同的科技公司、或者兩個不同的部門團隊,怎麼使用伺服器做溝通呢?也是雙方溝通好,會出什麼樣功能的API,給對方去呼叫(call)。
當然實現API的方式有百百種,有HTTP、Web Socket、RPC...等方式去實現。


動手做一個API伺服器吧

以下範例的程式碼可以在這邊下載

與昨天一樣,我選用Go語言做示範。
想看昨天怎麼做「網頁伺服器」的人,這邊有傳送門

  1. 這邊先簡單描述一下資料夾架構 (如下圖)
/
|-- main.go # 你沒看錯,只有一個檔案XD
  1. 撰寫API
package main

import (
	"log"
	"net/http"
)

func main() {
	router := http.NewServeMux()
	router.HandleFunc("/api-demo", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("你的名字是" + r.URL.Query().Get("name")))
	})

	log.Println("開始建立伺服器")
	log.Fatal(http.ListenAndServe(":8000", router))
}
  1. 啟動服務,開啟瀏覽器http://localhost:8000/api-demo
    可以看見以下畫面,單純出現一串字「你的名字是」
    https://ithelp.ithome.com.tw/upload/images/20200904/20125815b6UhLCedNl.png

這時候我們在網址上加點手腳,加上?name=zuolar
就可以發現伺服器根據我們提供的資料,給對應的回覆了!
用瀏覽器去開啟連結就是「呼叫請求」(call request),而在網址加上資料name就是一種資料傳輸的動作。
https://ithelp.ithome.com.tw/upload/images/20200904/20125815HDNDFb3RSJ.png

小結

API本身就是一種讓人們可以互相溝通、互相遵循的說詞。
透過上面範例,我們知道伺服器除了用來顯示檔案頁面以外,還可以定義API讓人呼叫請求,並且得到資料的回傳。
進階一點的應用,我們還可以搭配資料庫,透過API請求,紀錄請求資料、顯示相關資料畫面、給予功能服務。
而平日生活,我們使用逛網購下訂單、玩遊戲、視訊聊天...等服務功能,也都是API的產物了。

明天我們要正式切入伺服器的配置,探討建置伺服器以外,我們還需要做哪些工作呢?明天再見囉https://ithelp.ithome.com.tw/images/emoticon/emoticon29.gif

ps. 由於一些工作因素,差點趕不上截止時間,所以先發表文章以免中斷,敬請見諒/images/emoticon/emoticon41.gif


上一篇
Day02 動手做一個伺服器吧!
下一篇
Day04 怎麼管理多個伺服器環境?
系列文
在後端漫遊,基礎N大建設6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言