【Next.js】getServerSidePropsからAPIを叩く方法

getServerSidePropsを用いてサーバーサイドでAPIを叩いてデータを取得し、レンダリングするまでの流れをご紹介します。

目次

getServerSidePropsとは

Next.jsの公式チュートリアルによると、getServerSidePropsについてこのように記載されています。

getServerSideProps(サーバーサイドレンダリング)と呼ばれる関数をページからエクスポートする場合、getServerSidePropsから返ってきたデータを用いてNext.jsは毎リクエストごとにそのページのプリレンダリングを行います。

export async function getServerSideProps(context) {
  return {
    props: {}, // ページコンポーネントに 'props' として渡されます.
  }
}
Next.jsチュートリアルより

またいつgetServerSidePropsを使うべきかについてはこのように言及されています。

リクエスト時に取得する必要があるデータをページにレンダリングする必要がある場合にのみ、getServerSidePropsを使用するべきです。

… 略 …

リクエスト時にデータをレンダリングする必要がない場合は、クライアントサイドやgetStaticPropsを用いてデータを取得することを考慮すべきです。

Next.jsチュートリアル「When should I use getServerSidePropsより

クライアント側(ブラウザ)かサーバー側どっちでレンダリングすべきなのか意識せえよ、ってことですね。

方法

今回はNext.jsのAPIを、getServerSidePropsで呼び出す方法でいきます。

Next.jsのAPIとは、pages/api配下にあるやつのことです。

pages/api/getBooks.tsx

import type { NextApiRequest, NextApiResponse } from 'next'

// 取得する情報のインターフェース
export interface Book {
  id: string, 
  title: string, 
  pageCount: number | null, 
}

// Google Books API からキーワードに関する書籍を検索する関数
export async function getData(keyword: string): Promise<Book[]> {
  const res = await fetch("https://www.googleapis.com/books/v1/volumes?q=" + encodeURIComponent(keyword))
  const jsonData = await res.json()
  return jsonData.items.map((elem: any) => {
    return {
      id: elem.id,
      title: elem.volumeInfo.title,
      pageCount: elem.pageCount || null
    }
  });
}

// Next.jsのAPI定義
export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse<any>
) {
  // const data = await getData();
  const data = await getData('ドラえもん');
  res.status(200).json(data);
}

pages/index.tsx

import { GetServerSideProps } from "next";
import { Book, getData } from "./api/books"

export default function Home(props: any) {
  return (
    <>
      <ul>
        {props.items.map((item: Book) => (
          <li>
            <p key={item.id}>{item.id}</p>
            <p key={item.title}>{item.title}</p>
          </li>
        ))}
      </ul>
    </>
  )
}

export const getServerSideProps: GetServerSideProps = async (context) => {
  const books: Book[] = await getData('ドラえもん');
  return {
    props: {items: books}
  }
}

対象ページにアクセスすると、このように取得したデータが表示されます。

以上です、お疲れさまでした!

まとめ

今回はサーバー側でAPIを叩いてデータを取得する方法でした。

逆にクライアント側からAPIを叩いて描写する方法はこちらの記事で紹介しておりますので、よろしければご覧ください。

ご覧いただきありがとうございました!

案件、ありますか?

「メインの仕事があるけれど、週1、2日だけできる仕事ないかな、、、」

「ある程度スキルが身に付いてはきたけど、そのスキルを活用できる場が欲しい」

なんて悩みが以前はありました。

自分で仕事を探しに行くのも大事ですが、蛇の道は蛇。その道の人に頼むことで、自分だけでは見つからないような案件に携わることができます。

IT PRO パートナーズでは、簡単に無料でアカウントを登録でき、さらにはエージェントさんに希望の働き方・案件の種類を提示することでお仕事を紹介してくれます!

登録自体も非常に簡単で、「エージェントさんとの面談を希望する」という欄にチェックをするだけで、エージェントさんから直接連絡をいただくことができます。

驚くほど簡単で正直拍子抜けしてしまいました笑

もしお仕事探しに困っておりましたら、一度登録し案件を眺めてみることをおすすめします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勤めていた設計会社を退社し、フリーランスとして活動しています
また、趣味で主にpyhonを用いて機械学習を行なっています!
現在競艇の予測モデルの開発中です。

コメント

コメント一覧 (1件)

コメントする

目次