API?
API (Application Programming Interface)究竟是什麼?

簡單來說你不需要理解程式內部是如何運作的,但只要透過 API 就可以輕鬆達成你要的結果。
但除了回復正確結果外,當碰到例外狀況,API也會在碰到問題時回應錯誤。
RESTful API?
表現層狀態轉換 (Representational State Transfer)
他算是一種設計風格並非標準,讓你的 API 更簡潔更好懂。

- Nouns:同樣的資源應該僅有一個唯一的識別位置。
- Verbs:對資源要做的動作。比如用 GET 取得文章內容、用 DELETE 刪除文章等等行為。
- Content Types:定義資料的格式。
一般 API:
獲得標籤GET /getLabel
新增標籤POST /createLabel
更新標籤PUT /updateLabel/{id}
刪除標籤DELETE /deleteLabel/{id}
RESTful API:
獲得標籤GET /label
新增標籤POST /label
更新標籤PUT /label/{id}
刪除標籤DELETE /label/{id}
😈用了 GET, POST, PUT, DELETE 不等於 RESTful API😈
❌ 錯誤:
上傳文章POST /api/article/upload
刪除文章DELETE /api/article/remove
⭕ 正確:
上傳文章POST /api/article
刪除文章DELETE /api/article/{id}
❗ 不好的Query String示範:
刪除文章DELETE /api/article?id=1234567
有趣且免費的 API 分享
- APOD (Astronomy Picture of the Day)
APOD 是 NASA 很著名的一個網站,從 1995-06-15 開始每天都由不同的天文學家去介紹當日圖片的特別之處。 - Mars Rover Photos
此 API 提供火星探測器 好奇號(Curiosity)、機會號(Opportunity)、勇氣號(Spirit)所拍攝的相關圖片。
🐶Dog API
狗以及更多的狗,可以自己選品種呦!
🧙Trace.moe
丟一張圖片,幫你尋找這是哪個動畫的場景。
🏴REST Countries
查看各國家的詳細資料
👮JailBase API
關注美國逮捕的最新情況以及查犯人
🏛政府 OpenData
不有趣,只是因為我生在台灣。
Python Flask 實作回傳圖片 API

- 安裝 flask 套件
$ pip install Flask
- 創建 app.py,引入 Module 並做一個簡易的 Hello World
# app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
- 啟動
$ flask run
啊我就不想這樣設定
檔案命名建議使用環境設定去做修改(Windows 別用PowerShell下= =),而 port、host 則在 flask run 時加參數就好
# Windows
$ set FLASK_APP=iDontWantCallApp.py
# Linux or Mac
$ export FLASK_APP=iDontWantCallApp.py
# 改 port 或 host 以及重製
flask run --reload --debugger --host 0.0.0.0 --port 80
直接在想起動的 .py 追加 app.run(),並用 $python 指令執行,但不建議,因為Flask官方也說明這種方式會造成未預期的錯誤。
# iDontWantCallApp.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0',port=80)
啊我就不想用這個靜態路徑
app = Flask(__name__, static_folder='what/i/want')
ngrok

- 註冊 & 登入
- 下載 ngrok
- 連接你的帳號 token
$ ngrok config add-authtoken <your token>
- 開始使用
選擇要對外的 port(免費仔只能有一個)
$ ngrok http 80
- 關掉 (ctrl+c)
# 介面消失時
$ taskkill /f /im ngrok.exe