Bird
Raised Fist0
Astroframework~10 mins

Caching API responses in Astro - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to fetch data from an API and cache it using Astro's cache API.

Astro
const response = await fetch('[1]');
const data = await response.json();
Drag options to blanks, or click blank then click option'
A'https://api.example.com/data'
B'https://api.wrong.com/info'
C'/local/data.json'
D'http://invalid-url'
Attempts:
3 left
💡 Hint
Common Mistakes
Using a local file path instead of an API URL.
Using an incorrect or invalid URL.
2fill in blank
medium

Complete the code to cache the API response for 1 hour using Astro's cache API.

Astro
const cachedData = await Astro.cache('[1]', async () => {
  const response = await fetch('https://api.example.com/data');
  return await response.json();
}, { ttl: 3600 });
Drag options to blanks, or click blank then click option'
A'apiResponse'
B'cacheKey'
C'dataKey'
D'userData'
Attempts:
3 left
💡 Hint
Common Mistakes
Using an empty string or non-descriptive key.
Using a key that conflicts with other cached data.
3fill in blank
hard

Fix the error in the code to correctly cache the API response with a 30-minute expiration.

Astro
const data = await Astro.cache('apiData', async () => {
  const response = await fetch('https://api.example.com/data');
  return await response.json();
}, { ttl: [1] });
Drag options to blanks, or click blank then click option'
A1800
B3600
C300
D60
Attempts:
3 left
💡 Hint
Common Mistakes
Using ttl in minutes instead of seconds.
Using a ttl value too short or too long for the requirement.
4fill in blank
hard

Fill both blanks to create a cache key using the API endpoint and user ID.

Astro
const cacheKey = '[1]' + '_' + [2];
const data = await Astro.cache(cacheKey, async () => {
  const response = await fetch('https://api.example.com/data');
  return await response.json();
}, { ttl: 600 });
Drag options to blanks, or click blank then click option'
A'apiData'
BuserId
C'cacheKey'
Duser.id
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong variable for user ID.
Not concatenating the key parts properly.
5fill in blank
hard

Fill all three blanks to fetch, cache, and handle errors gracefully.

Astro
try {
  const data = await Astro.cache([1], async () => {
    const response = await fetch([2]);
    if (!response.ok) throw new Error('Network error');
    return await response.json();
  }, { ttl: [3] });
} catch (error) {
  console.error(error);
}
Drag options to blanks, or click blank then click option'
A'userCache'
B'https://api.example.com/user'
C300
D'cacheKey'
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable instead of a string for cache key.
Using an incorrect API URL.
Setting ttl to an invalid value.

Practice

(1/5)
1. What is the main benefit of caching API responses in Astro?
easy
A. It speeds up the site by reusing previously fetched data
B. It increases the size of the API response
C. It makes the API slower to respond
D. It disables the API from updating

Solution

  1. Step 1: Understand caching purpose

    Caching stores data from previous API calls to avoid fetching again.
  2. Step 2: Identify benefit in Astro context

    Reusing cached data reduces load time and speeds up the site.
  3. Final Answer:

    It speeds up the site by reusing previously fetched data -> Option A
  4. Quick Check:

    Caching = Speed up site [OK]
Hint: Caching saves time by reusing data, not slowing down [OK]
Common Mistakes:
  • Thinking caching makes API slower
  • Confusing cache with data size increase
  • Believing cache disables updates
2. Which syntax correctly sets cache revalidation time in Astro?
easy
A. const data = await fetch('https://api.example.com/data', { refresh: 60 });
B. const data = await fetch('https://api.example.com/data', { cacheTime: 60 });
C. const data = await fetch('https://api.example.com/data', { revalidate: 60 });
D. const data = await fetch('https://api.example.com/data', { updateAfter: 60 });

Solution

  1. Step 1: Recall correct property name

    The correct property to control cache duration is revalidate.
  2. Step 2: Match syntax with Astro docs

    The syntax uses { revalidate: 60 } inside fetch().
  3. Final Answer:

    const data = await fetch('https://api.example.com/data', { revalidate: 60 }); -> Option C
  4. Quick Check:

    Use revalidate property = const data = await fetch('https://api.example.com/data', { revalidate: 60 }); [OK]
Hint: Remember 'revalidate' sets cache time in seconds [OK]
Common Mistakes:
  • Using wrong property names like cacheTime or refresh
  • Forgetting to return an object
  • Placing revalidate outside return
3. Given this code snippet in Astro:
const data = await fetch('https://api.example.com/data', { revalidate: 120 }).then(res => res.json());

What happens when a user visits the page after 3 minutes?
medium
A. The cached data is used without fetching again
B. The cache is cleared but data is not fetched
C. The page shows an error due to cache expiry
D. The data is fetched again from the API

Solution

  1. Step 1: Understand revalidate timing

    The revalidate: 120 means cache lasts 120 seconds (2 minutes).
  2. Step 2: Compare visit time with cache duration

    After 3 minutes (180 seconds), cache expired, so Astro fetches fresh data.
  3. Final Answer:

    The data is fetched again from the API -> Option D
  4. Quick Check:

    Cache expired after 120s, fetch again [OK]
Hint: If visit time > revalidate, data refetches [OK]
Common Mistakes:
  • Assuming cache lasts forever
  • Thinking cache clears but no fetch happens
  • Confusing cache expiry with errors
4. Identify the error in this Astro caching code:
const data = await fetch('https://api.example.com/data').json();
medium
A. Missing await before .json() call
B. Incorrect property name 'revalidate'
C. fetch URL is invalid
D. Return statement missing props object

Solution

  1. Step 1: Check fetch usage

    fetch returns a Promise; calling .json() needs to await the fetch first.
  2. Step 2: Identify missing await

    Code calls fetch(...).json() without awaiting fetch, causing error.
  3. Final Answer:

    Missing await before .json() call -> Option A
  4. Quick Check:

    Await fetch before .json() [OK]
Hint: Always await fetch before calling .json() [OK]
Common Mistakes:
  • Calling .json() directly on fetch without await
  • Misnaming revalidate property
  • Assuming fetch URL is wrong without checking
5. You want to cache API data in Astro but update it every hour. Which is the best way to set revalidate and why?

Options:
A) revalidate: 3600 to update every hour
B) revalidate: 60 to update every minute
C) revalidate: 0 to never cache
D) revalidate: -1 to disable caching
hard
A. revalidate: 60 to update every minute
B. revalidate: 3600 to update every hour
C. revalidate: 0 to never cache
D. revalidate: -1 to disable caching

Solution

  1. Step 1: Understand revalidate meaning

    revalidate sets cache duration in seconds before refreshing data.
  2. Step 2: Match desired update frequency

    To update every hour, set revalidate to 3600 seconds (60*60).
  3. Step 3: Evaluate other options

    60 seconds updates too often, 0 disables caching, -1 is invalid.
  4. Final Answer:

    revalidate: 3600 to update every hour -> Option B
  5. Quick Check:

    1 hour = 3600 seconds revalidate [OK]
Hint: Set revalidate in seconds matching update frequency [OK]
Common Mistakes:
  • Using too short revalidate causing frequent fetches
  • Setting zero disables caching, not hourly update
  • Negative values are invalid
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard