FastOG SDK — ดาวน์โหลดและใช้งาน
หนึ่งไฟล์ต่อภาษา ไม่มี dependencies, ไม่ต้องใช้ package manager ดาวน์โหลดด้านล่าง (หรือ curl จาก CDN ของเรา) แล้วคัดลอกไปยังโปรเจกต์ของคุณ (เฉพาะฝั่งเซิร์ฟเวอร์) ดูแลรักษาเป็น v1 ที่นี่ — เมื่อสัญญาเปลี่ยนแปลง เราจะอัปเดตหน้านี้และไฟล์ที่ดาวน์โหลดได้พร้อมกัน สำหรับสัญญาการลงนามฉบับเต็มและการใช้งานที่เขียนด้วยมือในภาษาต่างๆ ดูที่ การรวม Agent และ LLM
ดาวน์โหลด
เลือกภาษาที่ต้องการแล้วคลิก ดาวน์โหลด (หรือคลิกขวา → บันทึกเป็น):
| ภาษา | ดาวน์โหลด |
|---|---|
| Node.js (CommonJS) | ⬇ fastog.js |
| Svelte / SvelteKit (ESM) | ⬇ fastog.js |
| PHP | ⬇ FastOg.php |
| Ruby / Rails | ⬇ fastog.rb |
| Python (Django / FastAPI / Flask) | ⬇ fastog.py |
| Go | ⬇ fastog.go |
| Express (Node) | ⬇ fastog.js |
| Next.js (App Router) | ⬇ fastog.js |
| Astro | ⬇ fastog.js |
| Vue / Nuxt | ⬇ fastog.js |
ลิงก์เหล่านี้เชื่อมไปยัง
/sdk/<file>ซึ่งให้บริการไฟล์ในรูปแบบดาวน์โหลด — หรือใช้curl -O https://fastog.com/sdk/<file>หากคุณต้องการใช้คำสั่งในบรรทัดคำสั่ง
Vue, Next.js, Astro และ Express ทำงานบน Node — ใช้ไฟล์ signer ที่ทดสอบแล้วร่วมกัน (CommonJS สำหรับ Express, ESM สำหรับส่วนที่เหลือ); เฉพาะส่วนการใช้งาน/README เท่านั้นที่แตกต่างกัน ไฟล์ sdk/<name>/README.md ของแต่ละเฟรมเวิร์กแสดงวิธีการผสานรวมที่แน่นอน
แต่ละไฟล์คือ SDK ทั้งหมด คัดลอกไปยังโปรเจกต์ของคุณ require/import แล้วเสร็จสิ้น
การใช้งาน
Node.js
const { ogImageUrl } = require("./fastog.js");
const url = ogImageUrl(
{
template: "blog",
title: "Hello World",
features: ["Free shipping", "30-day returns"],
},
{ key: process.env.FASTOG_API_KEY, secret: process.env.FASTOG_HMAC_SECRET },
);
SvelteKit (ใน +page.server.js / +layout.server.js)
import { ogImageUrl } from "$lib/fastog.js";
const url = ogImageUrl(params, {
key: process.env.FASTOG_API_KEY,
secret: process.env.FASTOG_HMAC_SECRET,
});
PHP
use FastOg\FastOg;
$url = FastOg::signedUrl($params, getenv('FASTOG_API_KEY'), getenv('FASTOG_HMAC_SECRET'));
Ruby / Rails
url = FastOg.signed_url(params, ENV.fetch("FASTOG_API_KEY"), ENV.fetch("FASTOG_HMAC_SECRET"))
Python (Django / FastAPI / Flask)
import fastog
url = fastog.signed_url(params, os.environ["FASTOG_API_KEY"], os.environ["FASTOG_HMAC_SECRET"])
Go
url := fastog.SignedURL(params, os.Getenv("FASTOG_API_KEY"), os.Getenv("FASTOG_HMAC_SECRET"))
Express / Next.js / Astro / Vue (Node) — นำเข้า signer (ฟังก์ชันลงนาม) เรียกใช้ ogImageUrl(params, { key, secret }) ในโค้ดฝั่งเซิร์ฟเวอร์ของคุณ แล้วแสดงผล URL ในส่วน head ดู sdk/<name>/README.md ของแต่ละเฟรมเวิร์ก
วาง url ลงใน <meta property="og:image"> ครอว์เลอร์จะทำการ GET — แคชที่ขอบเครือข่าย (edge-cached) เรนเดอร์หนึ่งครั้งต่อรูปภาพที่ไม่ซ้ำกัน
เวอร์ชัน
นี่คือ v1 และจะดูแลรักษาในตำแหน่งนี้ เมื่อสัญญา (contract) มีการเปลี่ยนแปลง เราจะอัปเดตไฟล์และหน้านี้ไปพร้อมกัน (v2, v3, …) — คุณอัปเดตโดยการดาวน์โหลดใหม่ ไม่มี registry ของแพ็กเกจให้ซิงค์ ไม่มีพิธีรีตองเรื่อง semver และไม่มีความคลาดเคลื่อนระหว่างแพ็กเกจหลายตัว
วิธีการทำงาน
canonical = sorted enc(key)=enc(value) pairs of every param except `s`, including `key`
message = "GET/api/v1/og" + "\n" + canonical
signature = hex(HMAC-SHA256(message, secret))
- การเปลี่ยนแปลงค่า param ใดๆ จะทำให้ลายเซ็นไม่ถูกต้อง →
401ไม่มีการเรนเดอร์ ไม่มีการนับโควตา - param ที่เหมือนกัน → URL ที่เหมือนกัน → สามารถแคชที่ขอบเครือข่ายได้ถาวร
- param แบบอาร์เรย์ (
features) จะถูกส่งออกเป็นkey[]=/key[0]=เพื่อให้เซิร์ฟเวอร์ถอดรหัสได้อย่างถูกต้อง - เพิกถอนได้โดยการหมุน secret ของคีย์
การตรวจสอบ
SDK ทั้งหมดได้รับการทดสอบกับเวกเตอร์ทองคำ (golden vector) ชุดเดียวกันที่สร้างโดยเซิร์ฟเวอร์ FastOG:
canonical = features=30-day%20returns&features=Free%20shipping&key=sk_test123&template=blog&title=Hello%20World
signature = a79232b15b45002aee76174f542e0a661b37cb1259df01e263c952ca4052a54d
หากโค้ดของคุณสร้างลายเซ็น (signature) นั้นสำหรับพารามิเตอร์เหล่านั้น เซิร์ฟเวอร์จะยอมรับ URL ของคุณ
ความปลอดภัย
secretใช้ได้เฉพาะฝั่งเซิร์ฟเวอร์ (server-side) เท่านั้น — ห้ามนำไปไว้ในเบราว์เซอร์หรือสคริปต์ CDN สาธารณะโดยเด็ดขาดkeyเป็นข้อมูลสาธารณะ (ปรากฏใน URL) — ซึ่งเป็นเรื่องปกติที่คาดหวังได้- ลงนาม (sign) บนเซิร์ฟเวอร์ของคุณเอง; สิ่งที่คุณฝังคือ URL ของ FastOG ไม่ใช่ความลับ (secret)