- HOME >
- Jamstack用語集 >
- API
API
Application Programming Interface(アプリケーションプログラミングインターフェース)
API を分かりやすく
API という言葉をよく聞くようになりましたよね?
APIとは、何かしらのソフトウェア(ウェブサービス、ライブラリ、OSなど)が提供する機能を、他のソフトウェアから利用するための「接続口」のようなものです。
これがピンとこないと思うんですよね。なので、例え話を使ってみますね。
想像してみてください。あなたがレストランに行き、美味しそうな料理を頼みたいと思ったとします。しかし、キッチンに直接行って「これを作って!」とは言えないですよね。なぜなら、キッチンはコックの領域で、客が入る場所ではないからです。それに、キッチンには色々な道具や食材があり、それをどう扱うかは専門的な知識が必要です。
それでもあなたは料理を頼むことができます。どうやって?それはウェイターを通じてです。ウェイターに「これを一つ」と頼むと、ウェイターがあなたの注文をキッチンに伝え、作られた料理をあなたのテーブルに運んでくれます。キッチンの中で何が起こったか詳しく知る必要はないんです。
ここで、ウェイターがAPIのようなものです。あなた(クライアント)とキッチン(サーバー)の間に立ち、コミュニケーションを助けてくれるんですね。
APIはウェブ開発においてとても重要です。Next.jsやJamstackのようなフレームワークでは、バックエンド(キッチン)からデータを取得するためにAPIを使用します。TypeScriptも同様に、ライブラリやフレームワークのAPIを使用して機能を利用します。
APIを使うことで、キッチンの詳細な仕組みを知らなくても、必要な料理(データや機能)を手に入れることができるんですよ。それは便利だと思いませんか?これがAPIの力なんですよ。
少しまとめますね。Jamstackでは、APIはアプリケーションの一部を担当する重要なコンポーネントです。JamstackはJavaScript、API、およびMarkupの頭文字を取って名付けられています。このアーキテクチャでは、各要素が特定の役割を担い、全体として効率的で安全なウェブアプリケーションを提供します。
「API」とは、「Application Programming Interface(アプリケーションプログラミングインターフェース)」の略称です。この技術は、Next.js や TypeScript を使った Web 開発において、異なるアプリケーション間でのデータの受け渡しや、外部サービスとの連携などで重要な役割を果たしています。
モノリシックなアーキテクチャからマイクロサービスへ
そもそも従来はセッションを保持して、モノリシックなサーバーが状態を保っていたのですが、これが遅いんですね。セキュリティの問題もありますし。
しかし、現在は専用のマイクロサービスによって代替され、シンプルになり、高速に表示させるのが主流となっています。マイクロサービスとは、アプリケーションを機能ごとに分割して、それぞれの機能を担当するサービスを作ることです。これにより、アプリケーション全体のパフォーマンスが向上します。
Jamstack におけるAPIは、大体のものは扱えますので、単純なHTMLよりも複雑なことをやる場合(決済や検索)に使うケースがあるかもしれません。
Jamstackアーキテクチャでは、APIはサーバーサイドの機能をクライアントサイドに公開するのが一般的です。例えば、データベースから情報を取得したり、クラウドサービスと連携したり、ユーザー認証を実行したりします。
このAPIの利用は、Jamstackがサーバーレスアーキテクチャを採用する理由の一つでもあります。これは、伝統的なモノリシックなサーバーアプリケーションが持つ全ての機能を持つ代わりに、必要な機能を提供する個々のAPIを利用します。これにより、各APIはその特定の機能に焦点を当てることができ、全体的にパフォーマンスとセキュリティが向上します。
Jamstackアプリケーションでは、通常、JavaScriptがブラウザで実行され、ユーザーとの対話を管理します。一方、APIはデータの提供、取得、保存などの機能を提供し、Markupは静的なコンテンツを提供します。これらの要素は、APIを通じて連携し、ユーザーにシームレスな体験を提供します。
APIは、アプリケーションがどのように動作し、どのように拡張するかを決定する重要な役割を果たします。そのため、Jamstackアプリケーションを設計する際には、どのAPIが必要で、それぞれがどのように連携するかを考慮する必要があります。
少しわかりやすく説明しますね
例えば、あなたが、お母さんに「今日の天気はどうかしら?」と聞かれました。あなたは、窓を開けて外を見て、今日の天気を教えることができます。このように、あなたは「天気」という情報を取得して、それをお母さんに伝えることができます。
Web 開発においても同じようなことができます。たとえば、外部サービスから天気情報を取得して、Web ページに表示することができます。このとき、API を利用することで、異なるアプリケーション間でデータをやり取りすることができます。
Next.js × TypeScript × API
具体的には、まず、Next.js と TypeScript を使って、天気情報を取得するための API を定義します。以下は、api/weather.ts
というファイルに API の定義を記述した例です。
import type { NextApiRequest, NextApiResponse } from 'next'
type WeatherResponse = {
weather: string
}
export default function handler(req: NextApiRequest, res: NextApiResponse<WeatherResponse>) {
const weather = '晴れ' // ここでは仮に「晴れ」という天気情報を返すことにする
res.status(200).json({ weather })
}
このコードでは、handler
関数が API の実態を表しています。この関数は、req
とres
という 2 つの引数を受け取ります。req
はリクエスト情報を、res
はレスポンス情報を表します。
また、WeatherResponse
という型を定義し、レスポンスとして返すデータの形式を指定しています。この場合、weather
というキーを持つオブジェクトを返すことができます。
天気情報を取得
次に、定義した API を利用するためのコードを、Web ページのコンポーネントに書きます。以下は、pages/index.tsx
ファイルに、API を利用して天気情報を取得するためのコードを記述した例です。
import { useState } from 'react'
import axios from 'axios'
export default function Home() {
const [weather, setWeather] = useState('取得中...')
async function getWeather() {
const res = await axios.get('/api/weather')
const data = res.data
setWeather(data.weather)
}
return (
<div>
<h1>今日の天気は?</h1>
<p>{weather}</p>
<button onClick={getWeather}>天気を取得する</button>
</div>
)
}
このコードでは、useState
フックを使って、天気情報を画面に表示するためのステートを定義しています。初期値として「取得中...」という文字列を設定します。また、getWeather
関数を定義し、API から天気情報を取得するためのコードを記述しています。
getWeather
関数では、axios
というライブラリを使って API を呼び出しています。API の URL は/api/weather
となっており、これは Next.js の API ルートを表しています。API のレスポンスはres.data
で取得できます。取得した天気情報を、ステートのweather
にセットすることで、画面に天気情報を表示することができます。
最後に、天気情報を取得するためのボタンを画面に表示するためのコードを書きます。このコードでは、button
要素を使って、ボタンを定義しています。ボタンがクリックされたら、getWeather
関数が呼び出され、天気情報を取得することができます。
以上のように、Next.js と TypeScript を使った API の例を紹介しました。このように、API を利用することで、異なるアプリケーション間でデータの受け渡しができるため、Web 開発において非常に重要な技術です。