Pages Functionsを使用してフロントエンド用のAPIを構築する
このチュートリアルでは、フルスタックのPagesアプリケーションを構築します。あなたのアプリケーションには以下が含まれます:
- Cloudflare PagesとReactフレームワークを使用して構築されたフロントエンド。
- フロントエンドで取得してレンダリングできるブログ投稿を返すPages Functionsで構築されたJSON API。
ブログコンテンツをレンダリングするためにAPIではなくヘッドレスCMSを使用したい場合は、ヘッドレスCMSチュートリアルを参照してください。
まず、Reactフレームワークを使用して新しいPagesアプリケーションを作成します。
ターミナルで、create-react-appコマンドを使用してblog-frontendという名前の新しいReactプロジェクトを作成します。新しく作成されたblog-frontendディレクトリに移動し、ローカル開発サーバーを起動します:
npx create-react-app blog-frontendcd blog-frontendnpm startReactプロジェクトを設定するには:
blog-frontendディレクトリのルートにReact Router ↗をインストールします。
npmを使用して:
npm install react-router-dom@6yarnを使用して:
yarn add react-router-dom@6src/App.jsの内容をクリアします。以下のコードをコピーしてApp.jsに貼り付け、React Routerをインポートし、2つのルートを持つ新しいルーターを設定します:
import { Routes, Route } from "react-router-dom";
import Posts from "./components/posts";import Post from "./components/post";
function App() { return ( <Routes> <Route path="/" element={<Posts />} /> <Route path="/posts/:id" element={<Post />} /> </Routes> );}
export default App;srcディレクトリにcomponentsという新しいフォルダを作成します。componentsディレクトリにposts.jsとpost.jsという2つのファイルを作成します。これらのファイルはAPIからブログ投稿を読み込み、レンダリングします。posts.jsに以下のコードを追加します:
import React, { useEffect, useState } from "react";import { Link } from "react-router-dom";
const Posts = () => { const [posts, setPosts] = useState([]);
useEffect(() => { const getPosts = async () => { const resp = await fetch("/api/posts"); const postsResp = await resp.json(); setPosts(postsResp); };
getPosts(); }, []);
return ( <div> <h1>投稿</h1> {posts.map((post) => ( <div key={post.id}> <h2> <Link to={`/posts/${post.id}`}>{post.title}</Link> </h2> </div> ))} </div> );};
export default Posts;post.jsに以下のコードを追加します:
import React, { useEffect, useState } from "react";import { Link, useParams } from "react-router-dom";
const Post = () => { const [post, setPost] = useState({}); const { id } = useParams();
useEffect(() => { const getPost = async () => { const resp = await fetch(`/api/post/${id}`); const postResp = await resp.json(); setPost(postResp); };
getPost(); }, [id]);
if (!Object.keys(post).length) return <div />;
return ( <div> <h1>{post.title}</h1> <p>{post.text}</p> <p> <em>公開日 {new Date(post.published_at).toLocaleString()}</em> </p> <p> <Link to="/">戻る</Link> </p> </div> );};
export default Post;次に、ブログコンテンツを保存し、JSON APIを介して取得するPages Functionsを作成します。
JSON APIとして機能するPages Functionを作成するには:
blog-frontendディレクトリにfunctionsディレクトリを作成します。functions内にapiという名前のディレクトリを作成します。api内にposts.jsファイルを作成します。posts.jsに以下のコードを追加します:
import posts from "./post/data";
export function onRequestGet() { return Response.json(posts);}このコードはブログデータ(ステップ8で作成するdata.jsから)を取得し、/api/postsパスからJSONレスポンスとして返します。
apiディレクトリ内にpostという名前のディレクトリを作成します。postディレクトリ内にdata.jsファイルを作成します。data.jsに以下のコードを追加します。ここにブログコンテンツ、ブログタイトル、およびブログに関するその他の情報が格納されます。
const posts = [ { id: 1, title: "私の最初のブログ投稿", text: "こんにちは世界!これは私の新しいCloudflare Workers + Pagesブログの最初のブログ投稿です。", published_at: new Date("2020-10-23"), }, { id: 2, title: "ブログの更新", text: "私の2番目のブログ投稿です!Cloudflare Workers + Pagesを使用してまだ書いて公開しています :)", published_at: new Date("2020-10-26"), },];
export default posts;postディレクトリ内に[[id]].jsファイルを作成します。[[id]].jsに以下のコードを追加します:
import posts from "./data";
export function onRequestGet(context) { const id = context.params.id;
if (!id) { return new Response("見つかりません", { status: 404 }); }
const post = posts.find((post) => post.id === Number(id));
if (!post) { return new Response("見つかりません", { status: 404 }); }
return Response.json(post);}[[id]].jsは動的ルートであり、ブログ投稿のidを受け入れるために使用されます。
PagesアプリケーションとPages Functionを設定した後、Wranglerまたはダッシュボードを使用してプロジェクトをデプロイします。
blog-frontendディレクトリ内で、wrangler pages deployを実行して、プロジェクトをCloudflareダッシュボードにデプロイします。
wrangler pages deploy blog-frontendCloudflareダッシュボードを介してデプロイするには、Pagesプロジェクト用の新しいGitリポジトリを作成し、GitリポジトリをCloudflareに接続する必要があります。このチュートリアルでは、GitHubをGitプロバイダーとして使用します。
repo.new ↗を訪れて新しいGitHubリポジトリを作成します。新しいリポジトリを作成した後、ターミナルで以下のコマンドを実行して、ローカルアプリケーションをGitHubに準備してプッシュします:
git initgit remote add origin https://github.com/<YOUR-GH-USERNAME>/<REPOSITORY-NAME>git add .git commit -m "初回コミット"git branch -M maingit push -u origin mainアプリケーションをPagesにデプロイします:
- Cloudflareダッシュボード ↗にログインし、アカウントを選択します。
- アカウントホームで、Workers & Pages > アプリケーションを作成 > Pages > Gitに接続を選択します。
- 作成した新しいGitHubリポジトリを選択し、ビルドとデプロイの設定セクションで以下の情報を提供します:
| 設定オプション | 値 |
|---|---|
| プロダクションブランチ | main |
| ビルドコマンド | npm run build |
| ビルドディレクトリ | build |
サイトの設定が完了したら、最初のデプロイを開始します。Cloudflare Pagesがblog-frontend、プロジェクトの依存関係をインストールし、サイトをビルドしているのが表示されるはずです。
このチュートリアルを完了することで、フルスタックのPagesアプリケーションを作成しました。
- Pages Functionsのルーティングについて学ぶ