署名付きレンダーURL
プレーンURLからオンザフライでレンダリング — <img> タグ、Open Graph イメージ、メールに最適です。APIキーはブラウザに送信されません。所有者が事前に URL に署名するため、常にサーブされます(API のようにクォータでブロックされることはありません)。また、リピートアクセスは CDN キャッシュされ、メータリングから重複排除されます。
GET https://api.mostlyrender.com/v1/templates/{id}/render.{ext}?<modifications>&sig=<signature>
# 例
<img src="https://api.mostlyrender.com/v1/templates/tpl_abc/render.png?title=Hello&theme=dusk&sig=8f3c…" />
{ext}はpng、jpg/jpeg、webp、またはpdfです。- 予約済みの
sig、scale、q以外のクエリパラメータはすべて modification として テンプレートに渡されます。 scale(1–3)はデバイススケールファクターを設定します。q(0–100)は JPEG/WebP 品質を設定します。
# 署名
最も簡単な方法:アプリでテンプレートを開き、署名付き埋め込み URL をコピーします — すでに署名済みで、<img> タグに貼り付ける準備ができています。
自分で URL を作成する場合、sig はテンプレート ID、拡張子、正規化されたクエリ文字列(パラメータをソート、sig を除外)を署名シークレットを使用して HMAC-SHA256 でハッシュします:
import crypto from 'node:crypto';
function signRenderUrl(base, secret, id, ext, params) {
const query = Object.keys(params).sort()
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`).join('&');
const sig = crypto.createHmac('sha256', secret).update(`${id}:${ext}:${query}`).digest('hex');
return `${base}/v1/templates/${id}/render.${ext}?${query}&sig=${sig}`;
}
sig が欠落している、または間違っているリクエストは 403 を返します。署名は署名したパラメータのみをカバーするため、改ざんされた URL(追加または変更されたパラメータ)は拒否されます。
# どれをいつ使うか
| 用途 | 選択肢 |
|---|---|
| サーバーサイドでの生成、URL の保存 | POST /v1/renders |
| 一度に多数 | Batch |
<img>/OG/メールに埋め込み、クライアントに キーがない |
署名付きレンダー URL |