基本功能
簽署網址
了解如何建立一個在有人開啟時繪製範本圖片的連結。
簽署網址是一個在有人開啟時繪製範本圖片的連結。你可以把它放進 <img> 標籤、電子郵件或 Open Graph 標籤,圖片載入時你的伺服器不需要做任何事。這很適合用於個人化的電子郵件標頭、分享卡片和徽章。
連結中帶有範本 ID、modification 和簽章。擁有這個連結的人都能開啟那張圖片,但沒有人能在不破壞簽章的情況下,變更範本或 modification。
用 SDK 建立簽署網址
SDK 會在你的伺服器上簽署網址,不會發出任何網路請求。
Examples
Open only what you need
JavaScript
const url = await bannerify.generateImageSignedUrl("tpl_xxx", {
modifications: [{ name: "headline", text: "Hello, Ada" }],
})Python
url = client.generate_image_signed_url(
"tpl_xxx",
modifications=[{"name": "headline", "text": "Hello, Ada"}],
)PHP
$url = $client->generateImageSignedUrl('tpl_xxx', [
'modifications' => [['name' => 'headline', 'text' => 'Hello, Ada']],
]);Go
url, err := client.GenerateImageSignedURL("tpl_xxx", &bannerify.CreateImageOptions{
Modifications: []bannerify.Modification{{Name: "headline", Text: ptr("Hello, Ada")}},
})每個 SDK 的選項都列在各自的頁面:JavaScript、Python、PHP 和 Go。
自行建立簽署網址
你可以用任何語言簽署網址。當沒有 SDK 支援你使用的語言,或 SDK 缺少你需要的選項(例如 Go 中的 nocache)時,這很有用。
- 用 SHA-256 對你的 API 金鑰做雜湊,並以十六進位寫出摘要。這就是
apiKeyHashed。Bannerify 用它來找到你的金鑰,它無法用來簽署任何東西。 - 從下方的表格蒐集參數。
modifications是 JSON 字串。 - 依名稱排序參數,然後以
URLSearchParams產生的格式寫成查詢字串。空格會變成+,除了英文字母、數字、*、-、.和_之外的每個字元,都會變成百分比編碼。 - 以你的 API 金鑰作為密鑰,計算該查詢字串的 HMAC-SHA256,並以十六進位寫出摘要。這就是
sign。 - 把
sign加到查詢字串中。
import { createHash, createHmac } from "node:crypto"
const apiKey = process.env.BANNERIFY_API_KEY!
const params = new URLSearchParams({
templateId: "tpl_xxx",
apiKeyHashed: createHash("sha256").update(apiKey).digest("hex"),
modifications: JSON.stringify([{ name: "headline", text: "Hello, Ada" }]),
nocache: "true",
})
params.sort()
params.set("sign", createHmac("sha256", apiKey).update(params.toString()).digest("hex"))
const url = `https://api.bannerify.co/v1/templates/signedurl?${params}`
參數
| 參數 | 必填 | 說明 |
|---|---|---|
templateId |
是 | 範本 ID |
apiKeyHashed |
是 | 你的 API 金鑰的 SHA-256 雜湊值,以十六進位表示 |
sign |
是 | 步驟 4 產生的簽章 |
modifications |
否 | JSON 字串。欄位請見 Modifications |
format |
否 | png、jpeg 或 webp。預設為 png |
quality |
否 | jpeg 和 webp 使用的 1 到 100 的整數。預設為 90 |
nocache |
否 | 設為 true 可略過快取 |
快取
Bannerify 會把繪製好的圖片保存在邊緣快取中,最多 7 天。快取鍵是完整的網址,所以 modification 不同,就是不同的圖片。由快取回應的請求不會重新繪製。
被持續請求的圖片會一直留在快取中。快取由 Cloudflare 執行,並由它決定要保留什麼,所以有一段時間沒人請求的副本,可能會在 7 天結束之前就被丟棄。下一個請求會重新繪製圖片,這次繪製會計入你的用量額度。
- 在編輯器中儲存範本,會清除該範本已快取的圖片。以其他方式所做的變更不會清除。
- Settings 的 General 分頁中的 Clear image cache,會清除專案中每個範本已快取的圖片,以及它們從其他網站載入並快取的檔案。
nocache=true會略過繪製圖片的快取。每個請求都會繪製新的圖片,回應也不會被儲存。每一次這樣的繪製都會計入你的用量額度。圖層從其他網站載入的快取檔案仍會被使用。
Bannerify 也會快取圖層從其他網站載入的每個檔案。只要該網站 Cache-Control 標頭中的 max-age 允許,就會保留該檔案,但最短 60 秒、最長 7 天。如果網站沒有傳送 max-age,Bannerify 會把檔案保留 1 天。當檔案變更時,請給它新的網址,或使用 Clear image cache。
用量額度與速率限制
一次繪製計為一次生成。由快取回應的請求不會計算。哪些情況會計算,請見用量額度與限制。
簽署網址的繪製有自己的速率限制,每個 API 金鑰每 10 秒 100 個請求。由快取回應的請求不計入。超過限制時,請求會回傳 RATE_LIMITED。
確保安全
- 請在你的伺服器上簽署。簽章會用到你的 API 金鑰,所以簽署用的程式碼不能在瀏覽器或你發行的應用程式中執行。
- 這個網址可以放心分享。它包含簽章和你金鑰的雜湊值,兩者都無法用來簽署另一個網址。
- 擁有網址的人可以隨意開啟任意次。網址永遠不會過期,而每一次沒有命中快取的繪製,都會計入你的用量額度。
- modification 會以純文字放在網址中。請不要在其中放入私人資料。
- 若要讓某個金鑰簽署的所有網址都失效,請在 API Keys 頁面刪除該金鑰。
疑難排解
請求失敗時,圖片標籤會顯示破圖。請在瀏覽器分頁中開啟網址來讀取錯誤。
| 錯誤 | 原因 | 解決方式 |
|---|---|---|
BAD_REQUEST:Missing apiKeyHashed |
網址沒有 apiKeyHashed 參數 |
加上這個參數。SDK 會幫你加上 |
BAD_REQUEST:Invalid api key |
沒有任何金鑰符合 apiKeyHashed,例如因為你刪除了金鑰 |
使用存在的金鑰簽署 |
BAD_REQUEST:Invalid sign |
簽章與參數不符 | 檢查網址沒有被編輯過,並確認你依照上述說明排序並編碼了參數 |
NOT_FOUND |
範本不存在 | 檢查 templateId |
USAGE_EXCEEDED |
你已達到生成次數上限 | 請見用量額度與限制 |
RATE_LIMITED |
10 秒內繪製的次數過多 | 等到下一個 10 秒時段,或讓快取處理重複的請求 |