Astro의 기본 제로 JavaScript 정적 및 하이브리드 렌더링 아키텍처는 고성능 브랜드 사이트와 블로그를 구축하는 데 완벽합니다. Kanorio Content Delivery API를 사용하면 단 몇 줄의 코드로 .astro 컴포넌트 상단에서 게시된 모든 컬렉션과 기사를 직접 가져올 수 있습니다.
Astro 프로젝트의 .env 파일에 Kanorio 사이트의 영구 시스템 URL을 추가합니다:
PUBLIC_KANORIO_SITE_URL="https://s-k4m9x2p7q8w3.kanorio.com"
src/pages/projects.astro).astro 파일의 Frontmatter 블록에서 /api/v1/collections/{key}/items를 직접 호출하고, 최상위 assets 맵을 사용하여 이미지 URL을 검색합니다:
--- const SITE_URL = import.meta.env.PUBLIC_KANORIO_SITE_URL; const res = await fetch(`${SITE_URL}/api/v1/collections/projects/items?sort=-publishedAt&limit=20`); const { items, assets } = await res.json(); --- <section> <h1>프로젝트</h1> <div class="grid"> {items.map((item) => { const cover = assets[item.fieldData.cover]; return ( <article> {cover && ( <img src={cover.url} alt={cover.alt ?? item.fieldData.title} width={cover.width ?? undefined} height={cover.height ?? undefined} loading="lazy" /> )} <h2>{item.fieldData.title}</h2> <p>{item.fieldData.summary}</p> </article> ); })} </div> </section>
src/pages/blog/[slug].astro)blog 컬렉션을 가져올 때 formats=html 및 expand=authors,categories를 포함합니다. 그런 다음 item.contentHtml을 Astro의 set:html에 직접 전달하여 렌더링하고, item.toc를 사용하여 목차를 생성할 수 있습니다:
--- const SITE_URL = import.meta.env.PUBLIC_KANORIO_SITE_URL; export async function getStaticPaths() { const siteUrl = import.meta.env.PUBLIC_KANORIO_SITE_URL; const res = await fetch(`${siteUrl}/api/v1/collections/blog/items?fields=title&limit=100`); const { items } = await res.json(); return items.map((post) => ({ params: { slug: post.slug } })); } const { slug } = Astro.params; const res = await fetch( `${SITE_URL}/api/v1/collections/blog/items/${encodeURIComponent(slug!)}?expand=authors,categories,tags&formats=html` ); if (!res.ok) return Astro.redirect("/404"); const { item, assets } = await res.json(); const coverId = (item.fieldData.cover_image ?? "").replace(/^asset:/, ""); const cover = assets[coverId]; --- <article> <h1>{item.fieldData.title}</h1> {cover && <img src={cover.url} alt={cover.alt ?? item.fieldData.title} />} {item.toc?.length > 0 && ( <nav aria-label="목차"> <ul> {item.toc.map((h) => ( <li data-level={h.level}> <a href={`#${h.id}`}>{h.label}</a> </li> ))} </ul> </nav> )} <div class="prose" set:html={item.contentHtml} /> </article>
GET ${PUBLIC_KANORIO_SITE_URL}/api/v1/forms/{formId}/challenge를 호출한 다음, 제출 시 /api/v1/forms/{formId}/submit으로 POST 요청을 보냅니다(전체 단계는 참조). 대시보드의 에 있는 "허용된 출처(Allowed Origins)" 목록에 프로덕션 도메인을 추가하는 것을 잊지 마십시오.@astrojs/cloudflare 또는 @astrojs/node): x-kanorio-public-version 및 X-Kanorio-Cache-Tags 헤더를 전달하거나 비교할 수 있습니다.collections.item.published, collections.item.unpublished, collections.item.deleted, collections.items.bulkChanged를 구독하여 콘텐츠가 게시되거나 업데이트될 때마다 자동으로 재배포를 트리거할 수 있습니다.아니요. 빌드 단계(getStaticPaths 및 .astro 서버 블록)에서는 요청이 Node.js 환경에서 이루어지므로 브라우저의 동일 출처 정책을 우회합니다. 방문자의 브라우저에서 <script>를 사용하여 교차 출처 API 호출(예: 문의 양식 제출 또는 실시간 검색)을 수행하는 경우에만 프론트엔드 도메인을 "허용된 출처"에 추가하면 됩니다.