MostlyRender

署名付きレンダーURL

プレーンURLからオンザフライでレンダリング — <img> タグ、Open Graph イメージ、メールに最適です。APIキーはブラウザに送信されません。所有者が事前に URL に署名するため、常にサーブされます(API のようにクォータでブロックされることはありません)。また、リピートアクセスは CDN キャッシュされ、メータリングから重複排除されます。

text
GET https://api.mostlyrender.com/v1/templates/{id}/render.{ext}?<modifications>&sig=<signature>

#

html
<img src="https://api.mostlyrender.com/v1/templates/tpl_abc/render.png?title=Hello&theme=dusk&sig=8f3c…" />
  • {ext}pngjpg/jpegwebp、または pdf です。
  • 予約済みの sigscaleq 以外のクエリパラメータはすべて modification として テンプレートに渡されます。
  • scale(1–3)はデバイススケールファクターを設定します。q(0–100)は JPEG/WebP 品質を設定します。

# 署名

最も簡単な方法:アプリでテンプレートを開き、署名付き埋め込み URL をコピーします — すでに署名済みで、<img> タグに貼り付ける準備ができています。

自分で URL を作成する場合、sig はテンプレート ID、拡張子、正規化されたクエリ文字列(パラメータをソート、sig を除外)を署名シークレットを使用して HMAC-SHA256 でハッシュします:

js
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