手を動かしてAPI取得の理解が深まった話

手を動かしてAPI取得の理解が深まった話

  • Post Author:

【概要】

API(Application Programming Interface)とは、他者が提供するデータや機能を、自分のアプリケーションに取り込むための仕組みです。例えば、テキストエディターやSNS機能をゼロから作成しなくても既存の機能を利用できます。

今回は、無料で利用可能なAPIを使用して、API取得に対する理解が深まったお話です。

無料で使えるAPIの例

  1. いろいろな写真を取得できるAPI https://picsum.photos/
  2. ハリー・ポッターのキャラクター情報を取得できるAPI https://hp-api.onrender.com/

【プログラムのAPI取得について概要】

  • APIのURL(エンドポイント)がJSON形式であること。
  • APIからデータを取得するには非同期処理が必要です。非同期処理はデータ取得中に他の処理を並行実行します。
  • 今回は2つのAPIを取得するのでReactでコンポーネント化しました。

Reactを使うことで、複数のAPIから取得したデータをコンポーネントごとにわけられます。またコンポーネント化することでコードの管理がしやすくなります。今回は、「いろいろな写真」と「ハリー・ポッター」の2つのAPI情報と「ナビゲーションバー」で、3つのコンポーネント化しました。

【プログラムの構成と説明】

メインのプログラムApp.js

App.jsは、2つのAPIからデータを取得し、それぞれのデータをコンポーネントに分けて表示します。

import { useEffect, useState } from "react";
import './App.css';
import ImageCard from "./components/ImageCard/ImageCard";
import Navbar from "./components/Navbar/Navbar";
import HarryPotterCard from "./components/HarryPotter/HarryPotterCard";
function App() {
  const imagesURL = "https://picsum.photos/v2/list?page=2&limit=20"; // いろいろな写真のAPI
  const harryPotterURL = "https://hp-api.onrender.com/api/characters"; // ハリー・ポッターのAPI
  
 // データ取得状況を管理
 const [loading, setLoading] = useState(true);
  const [images, setImages] = useState([]);
  const [harryPotterData, setHarryPotterData] = useState([]);
  
 // 非同期処理でAPIデータを取得
 useEffect(() => {
    const fetchData = async () => {
      try {
        const [imagesRes, harryPotterRes] = await Promise.all([
          fetch(imagesURL),
          fetch(harryPotterURL)
        ]);

    // レスポンスデータをJSON形式に変換
        const imagesData = await imagesRes.json();
        const harryPotterData = await harryPotterRes.json();
        setImages(imagesData);
        setHarryPotterData(harryPotterData);
      } catch (error) {
        console.error("データの取得に失敗しました", error);
      } finally {
        setLoading(false);
      }
    };
    fetchData();
  }, []);


  return (
    <>
      <Navbar />
      <div className="App">
        {loading ? (
          <h1>Loading...ロード中です。</h1>
        ) : (
          <div className="container">
            <div className="imageContainer">
              {images.map((image, index) => (
                <ImageCard key={index} image={image} />
              ))}
            </div>
            <div className="harryPotterContainer">
              {harryPotterData.map((character, index) => (
                <HarryPotterCard key={index} character={character} />
              ))}
            </div>
          </div>
        )}
      </div>
    </>
  );
}
export default App;

ハリー・ポッターのコンポーネント.js

このコンポーネントは、ハリー・ポッターAPIから取得したキャラクター情報を表示します。

import React from "react";
import "./HarryPotterCard.css";
const HarryPotterCard = ({ character }) => {
  return (
    <div className="harryPotterCard">
      <img src={character.image} />
      <h3>name:{character.name}</h3>
      <p>dateOfBirth:{character.dateOfBirth}</p>
    </div>
  );
};
export default HarryPotterCard;

APIを取得したスクリーンショット:「name・dateOfBirth・image」を取得しています。

【感想】

APIの「I」は、インターフェースです。「何か」と「何を」つなぐ役割を果たしています。APIを使用し、データの取得と非同期処理、Reactを使ったコンポーネント化によって、APIデータを表示することができました。実際に手を動かすことで、以下のような理解が深まりました。

  1. 非同期処理の必要性:APIからのデータ取得は即時に完了しないため、非同期処理を用いることで、他の処理を止めずに進行できること。
  2. コンポーネント化:データをコンポーネント(部品)に分けることで、コードの管理がしやすくなること。
  3. APIの仕組み: APIを使用すれば、他者が提供するデータや機能を自分のアプリケーションに取り入れることができること。

最初からそのデータや機能を作成しなくてもAPI経由で自分のアプリケーションに統合できるのです!

we are hiring

優秀な技術者と一緒に、好きな場所で働きませんか

株式会社もばらぶでは、優秀で意欲に溢れる方を常に求めています。働く場所は自由、働く時間も柔軟に選択可能です。

現在、以下の職種を募集中です。ご興味のある方は、リンク先をご参照下さい。

コメントを残す