API
よみかた:エーピーアイ
意味
アプリケーション同士が情報をやりとりするための仕組み。
Application Programming Interface(アプリケーション・プログラミング・インターフェース)の略で、異なるシステムやサービス間でデータを交換するための決まりごと(ルール)のこと。
ポイント
- 異なるシステム間でデータを安全に交換できる
- 決まった形式(ルール)に従って通信するため、安定した連携が可能
- Webサービスやスマホアプリ開発で頻繁に使用される
- 天気予報、地図、SNSなど多くのサービスがAPIを提供している
体験してみよう
APIはJSONデータで情報を交換する仕組みです。まずは3つの異なるAPIがどんなJSONデータを返すのか確認してみましょう。
①郵便番号から住所取得API
以下のURLをブラウザで開いてみてください:
https://zipcloud.ibsnet.co.jp/api/search?zipcode=1000001
copy
応用例:郵便番号から住所を自動取得
②ISSの現在位置API
以下のURLをブラウザで開いてみてください:
http://api.open-notify.org/iss-now.json
copy
応用例:国際宇宙ステーション(ISS)の現在位置を表示
③GitHubユーザープロフィールAPI
以下のURLをブラウザで開いてみてください:
https://api.github.com/users/octocat
copy
応用例:GitHubユーザーのプロフィール情報を表示
JavaScriptで実践してみよう
上の3つのデモと同じ機能を、JavaScriptのfetch
関数で実装してみましょう。
①郵便番号→住所取得のコード
async function searchAddress() {
const zipcode = document.getElementById('zipcode-input').value.trim();
const resultDiv = document.getElementById('address-result');
if (!zipcode) {
resultDiv.innerHTML = '郵便番号を入力してください
';
return;
}
resultDiv.innerHTML = '住所を検索中...
';
try {
const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${zipcode}`);
const data = await response.json();
if (data.results && data.results.length > 0) {
const address = data.results[0];
resultDiv.innerHTML = `
${address.address1} ${address.address2} ${address.address3}
郵便番号: ${address.zipcode}
`;
} else {
resultDiv.innerHTML = '住所が見つかりませんでした
';
}
} catch (error) {
resultDiv.innerHTML = 'エラーが発生しました
';
}
}
②ISS位置取得のコード
async function getISSPosition() {
const resultDiv = document.getElementById('iss-result');
resultDiv.innerHTML = 'ISS位置を取得中...
';
try {
const response = await fetch('http://api.open-notify.org/iss-now.json');
const data = await response.json();
const lat = parseFloat(data.iss_position.latitude).toFixed(4);
const lng = parseFloat(data.iss_position.longitude).toFixed(4);
const timestamp = new Date(data.timestamp * 1000).toLocaleString('ja-JP');
resultDiv.innerHTML = `
🛰️ ISS現在位置
緯度: ${lat}°
経度: ${lng}°
取得時刻: ${timestamp}
`;
} catch (error) {
resultDiv.innerHTML = 'ISS位置の取得に失敗しました
';
}
}
③GitHubプロフィール取得のコード
async function getGitHubProfile() {
const username = document.getElementById('username-input').value.trim() || 'octocat';
const messageDiv = document.getElementById('profile-message');
messageDiv.innerHTML = 'プロフィールを取得中...
';
try {
const response = await fetch(`https://api.github.com/users/${username}`);
if (!response.ok) {
throw new Error('ユーザーが見つかりませんでした');
}
const data = await response.json();
const createdDate = new Date(data.created_at).toLocaleDateString('ja-JP');
messageDiv.innerHTML = `
${data.name || data.login}
@${data.login}
リポジトリ: ${data.public_repos}個
フォロワー: ${data.followers}人
作成日: ${createdDate}
`;
} catch (error) {
messageDiv.innerHTML = `❌ ${error.message}
`;
}
}
HTML/CSS/JS 統合版テンプレート
3つのAPI例を含む完全なコードです。以下をコピーしてindex.html
として保存できます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3つのAPI体験</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f9f7ef;
}
.container {
background: white;
padding: 40px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.demo-section {
margin: 30px 0;
padding: 20px;
background: #f8f9fa;
border-radius: 8px;
}
input, button {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
}
button {
background: #ea9b8a;
color: white;
border: none;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<h1>3つのAPI体験</h1>
<div class="demo-section">
<h3>郵便番号→住所</h3>
<input type="text" id="zipcode" placeholder="郵便番号">
<button onclick="searchAddress()">検索</button>
<div id="address-result"></div>
</div>
<div class="demo-section">
<h3>ISS位置</h3>
<button onclick="getISSPosition()">位置取得</button>
<div id="iss-result"></div>
</div>
<div class="demo-section">
<h3>GitHubプロフィール</h3>
<input type="text" id="username" placeholder="ユーザー名" value="octocat">
<button onclick="getProfile()">取得</button>
<div id="profile-result"></div>
</div>
</div>
<script>
// 3つのAPI関数をここに含める(上記のコード例と同じ)
</script>
</body>
</html>