API 與 Webhook,其實並沒有那麼難懂
API 和 Webhook 都允許不同的軟體系統同步和共享資訊,隨著軟體應用程式變得越來越相互關聯,開發人員必須瞭解這兩種共享資料方式之間的區別,並選擇最能滿足手頭任務需求的工具。
API 與 Webhook
有關API和Webhook的概念、區別,網際網路上已經有不少解釋,本文就不再作過多贅述, 僅以兩個簡單的例子描述其原理,供讀者與使用者參考:
API採用的是“拉”資料的方式 。假設:專案A需要呼叫專案B的資料,則B要開放一個介面,每當A需要資料的時候,就向B傳送請求,通過這個介面獲得資料。這個介面就是API;
但麻煩也因此產生了:每當A需要呼叫資料的時候,都需要傳送一遍請求,效率較低;並且A並不知道B什麼時候更新資料,無法做到資料的實時同步。
這時候,Webhook的作用就體現出來了。
Webhook“人如其名”,採用的是“鉤(hook)”資料的方式 。同樣是專案A需要專案B的資料,Webhook的方式是需要A提供一個url給B,每當B更新資料時,可以通過Webhook及時將資料傳遞給A。
美洽如何使用 Webhook
在瞭解了API與Webhook的作用後,本文將重點介紹美洽是如何使用Webhook的。
正如前文所述,Webhook的特點在於:以事件驅動,可以在發生資料變化時及時回傳資料。因此,美洽將Webhook應用在軟體 工作臺的對話、顧客、工單資料等模組。
目前,美洽支援在工作臺手動或者自動觸發了下列事件之後,主動通知客戶的伺服器地址,並把相關資訊一併返回給客戶,以實現實時同步客戶資料,但 需要客戶按要求準備伺服器地址,並完成簽名校驗方可實現 :
動作 |
業務物件 |
觸發事件 |
結束對話(conversation.closed) |
|
手動或自動結束對話 |
更新對話(conversation.updated) |
|
客服修改對話小結 |
建立顧客(client.created) |
|
建立顧客、訪客轉換為顧客 |
更新顧客(client.updated) |
|
在工作臺更新顧客引數 |
刪除顧客(client.deleted) |
|
客戶在【顧客】刪除顧客 |
簽名校驗的具體流程如下:
-
讀取 HTTP 請求的 Body,將其轉換為字串 body_str ;
-
將 body_str 和 secret 拼接成需要加密的字串 encrypted_str , body_str 在前, secret 在後;
-
對 encrypted_str 進行 SHA1 加密得到 signature_str ;
-
將 signature_str 和 HTTP Header 中的 Meiqia-Signature 的值進行比對。
引數樣例如下:
POST
/
api
/
meiqia
/
notify
HTTP
/
1.1
Host
:
127.0
.
0.1
:5005
User
-
Agent
:
Go
-
http
-
client
/
1.1
Content
-
Length
:
3140
Content
-
Type
: application
/
json; charset
=
utf
-
8
Meiqia
-
Sign
: 44cb7f1e544d8830ab0e1feb959b94b3e02eb7e9
Accept
-
Encoding
: gzip
{
"id"
:
"sub_09e4bee581ffbcd347fcf634e0f99df8_1632648830"
,
//
美洽定義的通知唯一標識
"event"
:
"conversation.updated"
,
//
主題
"enterprise_token"
:
"09e4bee581ffbcd347fcf634e0f99df8"
,
//
美洽定義的企業
Token
"created_at"
:
1632648830
,
//
通知的建立時間
"conversation"
:
{
//
主題的業務物件
"enterprise_id"
:
97631
,
"dev_client_id"
: null
,
"page_from_url"
:
""
,
"search_engine"
:
""
}
}
如果配置成功,則返回狀態碼如下:
狀態碼 |
描述 |
200 |
成功,美洽將訂閱的主題成功推送到 Webhook URL |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984852/viewspace-2886891/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 升級struts2-2.5,其實並沒有想象中的那麼難
- 聊聊Spring的FactoryBean其實沒那麼難SpringBean
- 超越身邊80%的人,其實沒有你想象的那麼難!
- Javascript之其實我覺得原型鏈沒有難的那麼誇張!JavaScript原型
- 想拿到BAT的前端開發崗offer,並沒有想象中的那麼難!BAT前端
- Netty快速上手:Netty沒有你想象的那麼難Netty
- 基於 Serverless 的 Valine 可能並沒有那麼香Server
- 設計師如何針對遊戲做出平衡改動?其實並沒那麼簡單遊戲
- 賺錢,沒你想的那麼難
- Android螢幕適配很難嘛?其實也就那麼回事Android
- webpack-dev-server 其實並不難WebdevServer
- 相親原始碼中移動支付的實現,沒有想象中那麼難原始碼
- 程式設計真的有那麼難學嗎?其實不然,無非是沒找對方法罷了(以c/c++為例)程式設計C++
- Eutelsat:“超高畫質並沒有我們希望的那麼成功”
- App抓包其實沒那麼複雜!Charles來幫你搞定APP
- 其實吧,LRU也就那麼回事。
- 「碼農讀書」:我們並沒有自己想象的那麼理性
- 從入門到放棄?做個「懂」技術的產品經理沒那麼難!
- Java轉python機器學習,並沒有大家想象的那麼美好!JavaPython機器學習
- 全球“萬人迷”MySQL或許並沒有想象中的那麼“香”MySql
- 幽默:K8S沒有那麼難,部署在Kubernetes上個人部落格K8S
- 世嘉的霧遊戲有沒有那麼奇葩?遊戲
- 思邁特軟體VP徐晶:其實,金融科技也沒那麼“高大上”
- Python的協程真的有那麼難嗎?Python
- 雲端計算、大資料和人工智慧有什麼區別?理清楚其實並不難大資料人工智慧
- 【秋招復盤】覆盤我的美團,阿里,騰訊等面試經驗,其實進BAT上班真沒那麼難!阿里面試BAT
- 復刻或重製老遊戲,可能並沒有想象中那麼簡單遊戲
- 跨界汽車,也許並沒有家電巨頭想得那麼簡單
- 大資料SQL中的Join謂詞下推,真的那麼難懂?大資料SQL
- Pyhton抓取BOSS直聘職位描述和資料清洗,很簡單沒有那麼難
- 沒那麼複雜,讀懂這三個層級就讀懂人工智慧產業人工智慧產業
- 安全開發Java:日誌注入,並沒那麼簡單Java
- NER為什麼那麼難
- Java從程式設計師到架構師其實並不難Java程式設計師架構
- 【設計模式】第四篇:建造者模式也沒那麼難設計模式
- 分散式鎖沒那麼難,手把手教你實現 Redis 分佈鎖!|保姆級教程分散式Redis
- 學習滲透測試其實就是那麼簡單
- 為什麼我們說區塊鏈沒有那麼容易?區塊鏈