--- title: "用 Fastapi 建立簡單 Line bot" tags: "Fastapi X Line bot" description: "看到一般的教學網站,通常都是用 flask 這套工具來建構 Line bot,但是我最近更偏愛使用新銳 api 建構框架 Fastapi 來建構我的後端服務,所以我決定來研究看看怎麼用 Fastapi 來建構簡易的 Line bot" image: "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" --- 用 Fastapi 建立簡單 Line bot === 許久不見的文章 --- 真的是很久沒有寫文章了... 但是最近有學生開始要做自主學習,我就開始想:那我是不是還是來打個文章,讓學生如果搜尋線上資源時,也許就會看到我打出來的文章... 動機有點不純,但是總歸立意良善(笑 恩,總之開始吧! --- OUTLINE === [ToC] --- 前言 === 看到一般的教學網站,通常都是用 flask 這套工具來建構 Line bot。 但是我最近更偏愛使用新銳 api 建構框架 Fastapi 來建構我的後端服務, 因為我使用了 Fastapi 後,他幫我包裝起來的內容讓我更快地掌握建立 api 的內容, 我也覺得適用學生的學習(但是學生自主學習 fastapi 翻車了不少人,讓我不禁懷疑究竟是我的判斷失誤,還是 Fastapi 的官網如此難看懂...)。 所以我決定來研究看看怎麼用 Fastapi 來建構簡易的 Line bot :::info 這篇之後如果有空的話,可能會發展成系列文章 當作 2023 鐵人賽的素材(?) 反正就來試試看吧。。。 ::: Fastapi 介紹 === 先讓我們了解一下什麼是 [**Fastapi**](https://fastapi.tiangolo.com/zh/) ![](https://i.imgur.com/dRNynrL.png) 簡單來說, Fastapi 本人就是一個可以快速建構 restful api 的一個簡單框架。 為什麼他一定要基建於 Python 3.7 呢? 因為 3.7 之後才開始支援 async 異步程式設計, 作為一款新銳,號稱快速建構強大 restful api 的框架,當然要能夠支援 async 囉! 有了 async 的支援,讓單一線程的程式可以發揮出更大的效率。 扯遠了。。。 就讓我們來看一下簡單的程式碼吧! {%gist 8b067e90025d85f97537d1bf05e53f50 %} 這是一個使用 `GET` 來訪問 root path 的一個 api,最後會得到 `{message: "Hello world"}` 的結果。 這樣寫起來是不是很直覺呢? :::info 更多的 tutorial ,你可以看 [https://fastapi.tiangolo.com/tutorial/](https://fastapi.tiangolo.com/tutorial/) 我這邊就不贅述了。 ::: --- Line bot === 夜深了,有點懶得說明。。。 就讓我直接上連結結束這回合! <iframe width="100%" height="500px" src="https://steam.oxxostudio.tw/category/python/example/line-bot.html"></iframe> :::info 這個網站的作者本身也是老師,我覺得非常棒的學習資源,就跟大家分享囉 [https://steam.oxxostudio.tw/category/python/example/line-bot.html](https://steam.oxxostudio.tw/category/python/example/line-bot.html) ::: :::warning 不過他的程式碼好像比較舊一點, 最近使用 line bot sdk 時好像有新的程式碼可以使用,還是請讀者注意! ::: Fastapi X Line Bot === 終於進入正題了,好感動... :::warning 這邊我決定先上 code,原因絕對不是因為我想睡了...想草草結束... 我覺得如果你有毅力看到這邊,把一個基本的程式碼開放給你,好像也沒有什麼不好,對吧? 但是如果讀者是剛開始寫程式,我希望你能夠去思考: **我如何使用這個範例程式,來協助自己做想做的功能?** 如果你卡關了,不妨可以逐行研究一下我的程式碼為什麼這樣寫。 雖然沒有為什麼,就是那些 package 、 library 規定的寫法, 但是暫時沒想法,不妨可以了解一下原理, **讓你自己產生想法喔!** 如果你已經是寫程式的老屁股了的話... 多研究文件吧,真的,對你有幫助! ::: Sample Code --- {%gist 4f45d021e855696c9c1a18e3cec34290 %}