2017/12/23

第四天:認識 Webhook( 2018 iT邦幫忙鐵人賽-只要有心,人人都可以作卡米狗 )

markdown 上一篇:[第三天:作一隻最簡單的 Line 聊天機器人](http://etrex.blogspot.tw/2017/12/line-2018-it.html) 用一句話來說明什麼是 Webhook:「Webhook 是讓一個網站能訂閱另一個網站的方法。」為了確保我們對訂閱的理解是一致的,接下來會講什麼是訂閱。 # 訂閱是事件驅動 訂閱是當某些事情發生的時候,通知者會告訴訂閱者這件事發生了。既然訂閱了,就表示收到事件後訂閱者應該會採取某些行動。 訂閱階段: ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxQre0PAO8FSgbLTRjg1ojG4mpTnGok-P0IaFb7GxsPtf7AecjfXb_orl8SlkonyRyuMavZQntmasEbGORv_u7MPmoX6vXCTVtuZstNCf3ZQzWFmV16x6Rp6UguV1KrCXOSQ-jkH_GZvE/s1600/1514224595487.jpg) 通知階段: ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBBIMUbZkM2KCYnNw0KmOHPvgCqcm1Q9LqmcOgTGn8VU9kUAkez8NLFa17kAfSY2we2sVCviVOp9kXieqd7YyyFLORUvvFwnhhZoL2G0dRJBp3isGSwmghyzgJ6lWOncpNqQqPEfsRmgY/s1600/1514224605053.jpg) 下面會用生活中的例子來說明什麼是訂閱。 ### 設定鬧鐘 設定鬧鐘是一種訂閱行為。為什麼你會需要一個鬧鐘呢?因為你可能早上 9 點有事,希望能在早上 8 點起床。以這個例子來說: - 訂閱者是你 - 通知者是鬧鐘 - 事件是當早上 8 點 - 你會採取的行動是起床 當然你也許會希望通知者是你的妹妹,可是你不一定有妹妹。 ### 點餐 點餐是一種訂閱行為。首先你到櫃檯跟 NPC 點餐,點完餐之後你可能會取得一個會震動的小物,或者一根旗子,或一張紙,或者什麼都沒有,總之你會待在位置上等,直到 NPC 送餐給你,或者小物開始發出光芒並且震動,然後你帶著震動小物去找 NPC 取餐。 - 訂閱者是你 - 通知者是餐廳的 NPC - 事件是當餐點作好時 - 你會採取的行動是取得餐點 ### 你的主管交代你作事 你的主管交代你作事可能隱含著一種訂閱行為。首先你的主管找到你,然後跟你說:「這件事就交給你負責了。」你:「好哦~好哦~」 - 訂閱者是你的主管 - 通知者是你 - 事件是當你作好那件事時 - 你的主管會採取的行動是安排更多的事情給你 ### 訂閱[「只要有心,人人都可以做卡米狗」系列文](https://ithelp.ithome.com.tw/users/20107309/ironman/1253) 訂閱[「只要有心,人人都可以做卡米狗」系列文](https://ithelp.ithome.com.tw/users/20107309/ironman/1253)是一種訂閱行為。首先你會到[「只要有心,人人都可以做卡米狗」系列文](https://ithelp.ithome.com.tw/users/20107309/ironman/1253)按下「訂閱系列文」。訂閱之後,當我發新文章時,你會在 iT 邦幫忙的網頁右上角收到一個通知。(可是如果你不會時常開著 iT 邦幫忙的網頁,又為什麼要訂閱呢?_?) - 訂閱者是你 - 通知者是我 - 事件是當我寫好新文章時 - 你會採取的行動是讀我的新文章 ### 按讚[卡米狗 FB 粉絲團](https://www.facebook.com/kamigo01) 按讚[卡米狗 FB 粉絲團](https://www.facebook.com/kamigo01)是一種訂閱行為。首先你會到[卡米狗 FB 粉絲團](https://www.facebook.com/kamigo01)按下「讚」。當我在粉絲團發表貼文時,你會在 FB 網頁右上角收到一個通知。 - 訂閱者是你 - 通知者是我 - 事件是當我在粉絲團發表貼文時 - 你會採取的行動是讀我的貼文 如果你不會時常開著 iT 邦幫忙的網頁,那麼就應該訂閱一下卡米狗 FB 粉絲團。 你可能會問:「我為什麼要訂閱?」 # 為什麼要訂閱 對呀,為什麼要訂閱呢? ### 訂閱是有效率的雙向溝通方法 使用訂閱可以使你不需要去檢查事件到底發生了沒,而且可以讓你在事件發生的瞬間就立即採取行動。 ### 如果你沒有訂閱鬧鐘 你會睡得不安穩,或者睡過頭。你必須不斷的起床看時鐘(注意,時鐘跟鬧鐘不同),以確保你沒有睡過頭。 ### 如果你事情做完沒跟你主管講 你會比較爽,但是如果你的主管有看這篇文的話,他會知道你在摸魚。訂閱是一種很吃信用的機制,當通知者經常沒有盡通知責任時,訂閱功能就完全失效了,訂閱失效後就要回歸到原始的方法:單向溝通。 ### 單向溝通是沒有效率的溝通方法 假設你去早餐店點個早餐內用桌號3,在你手機滑了兩小時後,發現早餐還沒送來,於是你去問早餐店老闆:「阿我的早餐有做嗎?」老闆回:「有啦~有啦~正在做。」其實根本就忘記做,而且也差不多該吃午餐了。但如果在你手機滑十分鐘時就去跟老闆確認,也許你可以早一點拿到。 假設你是主管,你應該要跟你的員工說事情做好時跟你說一聲,明確表達你想要訂閱你員工,以確保你可以在你員工事情做完時就安排下一件事情。為了確保當通知者不盡通知責任時,你還是可以榨乾他,你要追問一個逾期時間,在時間內沒做完你就會去找他,也就是說交代工作時應該要說兩件事:「你預計什麼時候會做完」「做完的時候叫我」,如果你發現你的員工都沒有主動來找你,而是你去找他,他才跟你說「喔!我剛做好呢!」「喔!我做完忘記跟你講」那肯定就是他在摸魚。 所以不管做什麼事,還是要主動一點才好。 講到這裡,人與人之間的溝通方法,我想大家應該都完全理解。至於網站跟網站之間的溝通方法有很多種,Webhook 使用的是 HTTP 協定。 # HTTP 協定 電腦跟電腦在網路上傳遞訊息的方法其實跟郵局送掛號很像。你會作出一張明信片寄出(HTTP Request),明信片會在網路上傳遞,每個經手的郵局、郵差都能看見你寫的內容,收件人必須在收到每個明信片時進行簽收,還要立馬寄一封回信(HTTP Response),最後寄件人會收到回信,就算完成一次交流。 ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc3Fed2EF1rmaFfMPmAINsbWVrahPMsMxeyDLjtXNGwbZ7gELHMztaarmtTD1nZ7MXhGfW7WO5wYrfEtX_1NAUig94MkfxnlA63mHXq7cA7EOj3GjB_68kYgZdAuPG1OhEvzzNz1YJ734/s1600/1514224249985.jpg) 從這張圖來看我們可以知道,你是主動方,網站是被動方。只要你不戳他,他就不會回。一個基本的網站就是這樣,只要你不做任何操作,網頁上的東西就不會變。你可能需要不斷地按下重新整理,確保你看見的畫面是最新的,舉個例:這篇文章的瀏覽量不會主動更新。 ### HTTP 協定有安全性問題 這樣的溝通方式是不安全的,只要任何一個經手的郵局、郵差是壞人,就可以偽造信件內容。有一種詐騙手法是詐騙集團會寄假的繳費單給你,如果你以為繳費單是真的,你就會去便利商店繳費。在網路上也有類似的詐騙手法。那麼要怎樣才能確保安全(Secure)呢?答案就是使用安全(Secure)的 HTTP 協定。 # HTTPS 協定 HTTPS 協定就是安全的 HTTP 協定,跟 HTTP 協定有 87% 像,不同的是它傳遞的不是明信片而是密信片,經手的郵局、郵差無法看懂內容。而且寄件者的簽名有經過認證,可以確認寄件人身分,不用擔心收到造假的信。 今天就講到這裡,明天會講 Line Webhook 實際的運作流程。

沒有留言: