关于api:API与Webhook其实并没有那么难懂

7次阅读

共计 1676 个字符,预计需要花费 5 分钟才能阅读完成。

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 手动或主动完结对话
更新对话(conversation.updated) Conversation 客服批改对话小结
创立顾客(client.created) Client 创立顾客、访客转换为顾客
更新顾客(client.updated) Client 在工作台更新顾客参数
删除顾客(client.deleted) Client 客户在【顾客】删除顾客

签名校验的具体流程如下:

  1. 读取 HTTP 申请的 Body,将其转换为字符串 body_str;
  2. 将 body_str 和 secret 拼接成须要加密的字符串 encrypted_str,body_str 在前,secret 在后;
  3. 对 encrypted_str 进行 SHA1 加密失去 signature_str;
  4. 将 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

正文完
 0