מדריך קלאודפלייר בעברית

תיעוד 253

ממשק ה-API של Workers

Workers מאפשרים להריץ קוד בקצה. כשמקשרים דלי R2 ל-Worker, אפשר לקרוא ולכתוב אובייקטים ישירות באמצעות ממשק ה-API של Workers.

#1. יצירת דלי

דלי מאחסן את האובייקטים שלכם ב-R2. כדי ליצור דלי R2 חדש:

  1. התחברו לחשבון Cloudflare שלכם:

    npx wrangler login
  2. צרו דלי בשם my-bucket:

    npx wrangler r2 bucket create my-bucket

    אם מופיעה בקשה, בחרו את החשבון שבו אתם רוצים ליצור את הדלי.

  3. ודאו שהדלי נוצר:

    npx wrangler r2 bucket list
  4. בלוח הבקרה של Cloudflare, עברו אל R2 object storage. מעבר אל Overview ↗

  5. בחרו Create bucket.

  6. הזינו שם לדלי.

  7. בחרו מיקום לדלי ומחלקת אחסון ברירת מחדל.

  8. בחרו Create bucket.

#2. יצירת Worker עם קישור R2

  1. צרו פרויקט Worker חדש:

    npm:

    npm create cloudflare@latest -- r2-worker

    yarn:

    yarn create cloudflare r2-worker

    pnpm:

    pnpm create cloudflare@latest r2-worker

    כשמופיעה בקשה, בחרו Hello World example ו-JavaScript (או TypeScript) כתבנית.

  2. עברו אל תיקיית הפרויקט:

    cd r2-worker
  3. הוסיפו קישור R2 לקובץ התצורה של Wrangler. החליפו את my-bucket בשם הדלי שלכם:

    {
      "r2_buckets": [
        {
          "binding": "MY_BUCKET",
          "bucket_name": "my-bucket"
        }
      ]
    }
    [[r2_buckets]]
    binding = "MY_BUCKET"
    bucket_name = "my-bucket"
  4. (אופציונלי) אם אתם משתמשים ב-TypeScript, צרו מחדש את הטיפוסים:

    npx wrangler types

#3. קריאה וכתיבה של אובייקטים

השתמשו בקישור כדי לעבוד עם הדלי. הדוגמה הזו מאחסנת ומאחזרת אובייקטים לפי נתיב ה-URL:

src/index.js:

export default {
	async fetch(request, env) {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
};

src/index.ts:

export default {
	async fetch(request, env): Promise<Response> {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
} satisfies ExportedHandler<Env>;

#4. בדיקה ופריסה

  1. בדקו את ה-Worker באופן מקומי:

    npx wrangler dev

    פיתוח מקומי

    כברירת מחדל, wrangler dev משתמש בהדמיה מקומית של R2. אובייקטים שאתם מאחסנים במהלך הפיתוח קיימים רק במחשב שלכם בתיקייה .wrangler/state ואינם משפיעים על דלי הייצור.

    כדי להתחבר לדלי R2 האמיתי במהלך הפיתוח, הוסיפו "remote": true לקישור ה-R2 בקובץ התצורה של Wrangler. עיינו בקישורי remote למידע נוסף.

  2. אחרי ששרת הפיתוח רץ, בדקו אחסון ואחזור של אובייקטים:

    # Store an object
    curl -X PUT http://localhost:8787/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl http://localhost:8787/my-file.txt
  3. פרסו לייצור:

    npx wrangler deploy
  4. אחרי הפריסה, Wrangler מציג את כתובת ה-URL של ה-Worker (לדוגמה, https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev). בדקו אחסון ואחזור של אובייקטים:

    # Store an object
    curl -X PUT https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt

עיינו בתיעוד ממשק ה-API של R2 ל-Workers לעיון המלא ב-API.

#השלבים הבאים

#כתובות URL חתומות מראש

יצירת כתובות URL זמניות לגישה פרטית לאובייקטים.

#דליים ציבוריים

הגשת קבצים ישירות ב-HTTP באמצעות דלי ציבורי.

#CORS

הגדרת CORS להעלאות מהדפדפן.

#מחזורי חיים של אובייקטים

הגדרת כללי מחזור חיים למחיקה אוטומטית של אובייקטים ישנים.