`Fastly Compute`
Fastly Compute هو نظام حوسبة حافة (edge computing) متقدم يشغّل كودك، بلغتك المفضلة، على شبكة الحافة العالمية لـ Fastly. يعمل Hono أيضًا على Fastly Compute.
يمكنك تطوير التطبيق محليًا ونشره بأوامر قليلة باستخدام Fastly CLI، والذي يُثبَّت محليًا تلقائيًا كجزء من القالب (template).
1. الإعداد
يتوفر قالب بداية لـ Fastly Compute.
ابدأ مشروعك باستخدام الأمر "create-hono".
اختر fastly قالب لهذا المثال.
npm create hono@latest my-app
yarn create hono my-app
pnpm create hono my-app
bun create hono@latest my-app
deno init --npm hono my-app
انتقل إلى my-app وثبّت التبعيات.
cd my-app
npm i
cd my-app
yarn
cd my-app
pnpm i
cd my-app
bun i
2. مرحبًا بالعالم
تعديل src/index.ts:
// src/index.ts
import { Hono } from 'hono'
import { fire } from '@fastly/hono-fastly-compute'
const app = new Hono()
app.get('/', (c) => c.text('Hello Fastly!'))
fire(app)
[!NOTE] عند استخدام
fire(أوbuildFire()) من@fastly/hono-fastly-compute'على المستوى الأعلى (top level) لتطبيقك، من المناسب استخدامHonoمن'hono'بدلاً من'hono/quick'، لأنfireيجعل الموجّه الخاص به يبني بياناته الداخلية أثناء مرحلة تهيئة التطبيق.
3. تشغيل
شغّل خادم التطوير محليًا. ثم، ادخل إلى http://localhost:7676 في متصفح الويب الخاص بك.
npm run start
yarn start
pnpm run start
bun run start
4. النشر
لإنشاء تطبيقك ونشره إلى حساب Fastly الخاص بك، اكتب الأمر التالي. في المرة الأولى التي تنشر فيها التطبيق، سيُطلب منك إنشاء خدمة جديدة في حسابك.
إذا لم يكن لديك حساب بعد، فيجب عليك أنشئ حسابك على Fastly.
npm run deploy
yarn deploy
pnpm run deploy
bun run deploy
الارتباطات
في Fastly Compute، يمكنك ربط موارد منصة Fastly، مثل KV Stores و Config Stores و Secret Stores و Backends وقوائم التحكم في الوصول (Access Control Lists) وتدفقات السجلات المسماة (Named Log Streams) ومتغيرات البيئة. يمكنك الوصول إليها من خلال c.env، وستكون لها أنواع SDK الخاصة بها.
لاستخدام هذه الارتباطات (bindings)، استورد buildFire بدلاً من fire من @fastly/hono-fastly-compute. عرّف الارتباطات ومرِّرها إلى buildFire() للحصول على fire. ثم استخدم fire.Bindings لتعريف Env النوع عند إنشاء Hono.
// src/index.ts
import { buildFire } from '@fastly/hono-fastly-compute'
const fire = buildFire({
siteData: 'KVStore:site-data', // I have a KV Store named "site-data"
})
const app = new Hono<{ Bindings: typeof fire.Bindings }>()
app.put('/upload/:key', async (c, next) => {
// e.g., Access the KV Store
const key = c.req.param('key')
await c.env.siteData.put(key, c.req.body)
return c.text(`Put ${key} successfully!`)
})
fire(app)