iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
佛心分享-SideProject30

用 Sanity 跟 Nextjs 重寫個人部落格系列 第 25

Day 25 - Sanity Webhook 創立與 Header 解析

  • 分享至 

  • xImage
  •  

要設定 Sanity 的 Webhook 要從右上角這邊進入管理頁面:

https://ithelp.ithome.com.tw/upload/images/20241009/20101989oMZ8MCfkcZ.png

進入管理頁面後到 API > Webhooks 內設定 Webhook

https://ithelp.ithome.com.tw/upload/images/20241009/20101989lb1s1VdJzI.png

按 Create webhook 後就可以做設定了:

https://ithelp.ithome.com.tw/upload/images/20241009/20101989c0RwSobKCe.png

Trigger on 可以設定哪些行為要觸發 Webhook,可以選 Create, UpdateDelete,也可以一次選三個讓所有對資料的改動都觸發 Webhook
( 免費用戶限定只能創建 2 個 Webhooks,所以可以考慮每個動作都觸發,在程式裡做條件判斷 )

https://ithelp.ithome.com.tw/upload/images/20241009/20101989uZIFpUss4F.png

不僅可以設定觸發 Webhook 的變更行為,還可以設定觸發的 HTTP method,可以依據不同的動作有不同的 HTTP 行為,像是:

  • Create - POST
  • Update - PUT
  • Delete - DELETE

甚至有些特別需要用到 GET 的話也是可以的。
( 但正如方才提到的,免費用戶只能創建 2 個 Webhooks,所以可能無法針對每個行為特別指定 HTTP method,這要有所取捨了,可能都要在程式邏輯裡做判斷了 )

https://ithelp.ithome.com.tw/upload/images/20241009/20101989o13McqGvB4.png


最後稍微來看一下 Webhook 設定完成後會傳送的 Headers 訊息:

{
	"sanity-dataset": "production",
	"sanity-document-id": "zxxxxxxxxxxxxxxxxxxb",
	"sanity-operation": "update", // <- Sanity 的行為
	"sanity-project-id": "zxxxxxxg",
	"sanity-transaction-id": "Tpe1Rj6o9fDmGqbWvlbS3A",
	"sanity-transaction-time": "2024-10-09T12:55:02Z",
	"sanity-webhook-id": "QlyCyyQxxX5Ln1e2",
	"sanity-webhook-signature": "t=1728478502590,v1=d8bbJcxxx0wkAddd0Nmq3Su9k6bC4GbBvQILz_-oUYT",
	"x-api-key": "API_Value" // <- 自訂的 HTTP header
}

Sanity 傳送過來比較特別的是這些訊息,再特別來看一下 sanity-webhook-signature

{
	"sanity-webhook-signature": "t=1728478502590,v1=d8bbJcxxx0wkAddd0Nmq3Su9k6bC4GbBvQILz_-oUYT"
}

這個的結構是 t=12345, v1=d8bbJ…,tv1 就是在建立 Webhook 時設定的 Secret 經過加密後的值了,如果要驗證的話就是針對這段進行驗證。( 但自己做很難 )
不過不用擔心,Sanity 有提供官方的 toolkit 來做驗證的動作,我們不需要知道背後細節的。


上一篇
Day 24 - Next.js App Router 使用 NProgress 加入進度條
下一篇
Day 26 - Next.js + Sanity Webhook
系列文
用 Sanity 跟 Nextjs 重寫個人部落格30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言