# API 與網頁 :::info 相信各位已經開始著手設計自己的功能了 ::: > 根據 [wiki](https://zh.wikipedia.org/wiki/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%8E%A5%E5%8F%A3)所述,API[2],是一種計算介面,它定義多個軟體中介之間的互動,以及可以進行的呼叫(call)或請求(request)的種類,如何進行呼叫或發出請求,應使用的資料格式,應遵循的慣例等。 根據 API 的定義,讓使用者可以呼叫、請求並且得到最後的結果會是非常重要的環節 ![](https://hackmd.io/_uploads/B17e96pIh.png) 根據自己的服務設計 API 就是一個非常重要的環節 # 撰寫 API 的工具 目前最常見的 API 工具主要分成兩種: * Socket API (較底層建立連線的工具) * Restful API (應用層的資料傳輸) 以下會介紹通常使用時機,請各位碩零自行判斷要使用哪一種方法實作你自己的 API ## Socket API 對於伺服器來說,架設 socket server 並且提供服務必須要有以下步驟 ```graphviz digraph G { rankdir=LR "socket()" -> "bind()" -> "listen()" -> "accept()" } ``` 而對於 client 來說 ```graphviz digraph G { rankdir=LR "socket()" -> "connect()" } ``` 只要做到這幾件事情就可以做到傳送資料的目的 :::success 由於 socket server 本身可以做到保持連線的功能以及碰到相對更底層的實作內容,如果你的資料需要==保持連線==或是需要==額外解碼==,那 socket 為不二首選 ::: ## Restful API REST 代表表現層狀態轉換 (Representational State Transfer)。REST 定義了例如 GET、PUT、DELETE 的一組功能,用戶端可以利用它們來存取伺服器資料。用戶端和伺服器使用 HTTP 交換資料。 :::info 補充:GET, PUT, DELETE 這種都只是對伺服器端發出的 signal,在實作過程可以使用 DELETE signal 來進行本身是 GET 的工作。 ::: 對此,可以達成實作 API 效果的套件: * [Flask restful](https://flask-restful.readthedocs.io/en/latest/) 通常實驗室使用這個 :::success 如果你需要穩定的連線以及更多==應用層面==的需求,Restful 為更好的選擇 ::: # 網頁 有了傳送資料之後,另外一個非常重要的事情就是呈現資料,通常為了呈現資料,勢必需要一個方法給用戶(老師)看到你的資料以及資料轉換 * 實驗室通常使用 [flask_render_template](https://hackmd.io/@shaoeChen/HJkOuSagf?type=view) 當作網頁伺服器,只需要簡單幾行程式碼: ```python @app.route("/") # 目錄位置 def index(): return render_template("index.html") ``` 就可以把 html 頁面傳送給連線者。