この記事は、APIについて初めて学ぶ方や、基本的な仕組みを理解したい開発者向けです。
以前当ブログでは、addition.pyにより、追加機能の開発をしました。
せっかくなのでもう少しリッチな作りにしようと思います。
APIをコールして、外部からデータ取得を行う方法です。
さて、その前に,APIとはなにか?を、この記事では解説いたします。
APIって何?Webサービス開発に欠かせないAPIの基本を知りたいという方は是非ご参照ください。
APIとは
APIの基本概念
APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略です。難しく聞こえますが、実は私たちの日常生活に例えると理解しやすくなります。
レストランを想像してみてください。お客さん(あなた)がウェイター(API)に料理(データやサービス)を注文します。ウェイターはその注文をキッチン(サーバーやシステム)に伝え、料理ができたらあなたのテーブルまで運んできます。この時、あなたはキッチンの中がどうなっているか知らなくても、美味しい料理を楽しめますよね。
APIも同じです。あなたのアプリケーションが別のアプリケーションやサービスと通信するための「窓口」として機能します。内部の複雑な処理を知らなくても、必要な機能やデータをやり取りできる便利な仕組みなのです。
APIで解決できることは何か?
APIが存在しなかったら、プログラム同士が連携するたびに、相手の仕組みを完全に理解して直接コードを書き換える必要があります。これは非常に大変で時間もかかります。
APIがあれば以下のようなことが容易に達成できます。
- 内部構造を知らなくても必要な機能を利用できる
- 決められた方法で「お願い」するだけで目的を達成できる
- システム間の連携が格段に簡単になる
APIの種類と仕組み
APIには大きく分けて以下の種類があります。
- ライブラリAPI:プログラミング言語に組み込まれた関数やクラスなど
- OS API:オペレーティングシステムが提供する機能へのアクセス方法
- Web API:インターネット経由でサービスを提供するAPI(今回の主な話題)
Web APIは現代のウェブサービスで特に重要です。SNSへの投稿、天気予報の取得、オンライン決済など、多くのサービスがWeb APIを通じて機能を提供しています。
Web APIとREST APIを理解しよう
Web APIとは
Web APIとは、インターネット経由でアクセスできるAPIのことです。例えば
- X(Twitter)やInstagramの投稿を取得するAPI
- Googleマップで位置情報を扱うAPI
- 楽天やAmazonの商品情報を取得するAPI
これらは全て、開発者が自分のアプリケーションに外部サービスの機能を組み込むために利用できます。
REST APIとは
REST(Representational State Transfer)は、Web APIを設計する際の人気のある形式でです。RESTful APIと呼ばれることもあります。
RESTの主な特徴
- リソース指向:データやサービスを「リソース」として考え、URLで識別します
- HTTPメソッドの活用:GET(取得)、POST(作成)、PUT(更新)、DELETE(削除)などの標準的な操作方法を使います
- ステートレス:各リクエストは独立しており、前のリクエストの状態に依存しません
ブログ記事をREST APIで扱う
- 全記事の取得:
GET /articles
- 特定記事の取得:
GET /articles/123
- 新規記事の作成:
POST /articles
(内容を送信) - 記事の更新:
PUT /articles/123
(変更内容を送信) - 記事の削除:
DELETE /articles/123
APIエンドポイント
APIにアクセスする際の具体的なURLを「エンドポイント」と呼びます。
例えばですが、以下のようなURL形式でユーザーに展開されます。
https://api.example.com/v1/users
https://weather-api.com/forecast/tokyo
これらは特定の機能やデータにアクセスするための「入口」です。
HTTP通信の基本
Web APIはHTTP(HyperText Transfer Protocol)という通信プロトコルを使ってデータをやり取りします。
HTTPリクエストとレスポンス
APIとの通信は「リクエスト」と「レスポンス」のやり取りです。
- HTTPリクエスト:クライアント(あなたのアプリ)からサーバーへの要求
- メソッド(GET, POST, PUT, DELETEなど)
- URL(エンドポイント)
- ヘッダー(追加情報)
- ボディ(送信データ、必要な場合)
- HTTPレスポンス:サーバーからクライアントへの応答
- ステータスコード(200=成功、404=見つからない、500=サーバーエラーなど)
- ヘッダー
- ボディ(返されるデータ)
ステータスコードの意味
HTTPステータスコードは、リクエストの結果を示す3桁の数字です。
- 1xx:情報提供(処理中など)
- 2xx:成功(200 OK:リクエスト成功、201 Created:新規作成成功)
- 3xx:リダイレクト(他の場所に移動した)
- 4xx:クライアントエラー(400 Bad Request:不正なリクエスト、404 Not Found:見つからない)
- 5xx:サーバーエラー(500 Internal Server Error:サーバー内部エラー)
データ形式
APIでやり取りされるデータは主に以下の形式が使われます。
- JSON(JavaScript Object Notation):最も一般的
{ "id": 123, "title": "APIについて", "author": "山田太郎" }
- XML(eXtensible Markup Language):従来から使われている形式
<article> <id>123</id> <title>APIについて</title> <author>山田太郎</author> </article>
JSONはシンプルで軽量なため、現代のWeb APIでは最も広く採用されています。
APIキーと認証
多くのAPIでは、不正利用を防ぐために「APIキー」や認証が必要です。
- APIキー:特定のアプリケーションを識別するための文字列
- OAuth:ユーザーの代わりにAPIを利用するための認証方式
- JWT(JSON Web Token):安全な情報のやり取りに使われるトークン
これらを使って、APIプロバイダーはアクセス制限や使用量の制限を設けています。
実際のAPI活用例
天気予報を表示する
例えば、あなたのウェブサイトに天気予報を表示したい場合。
タスク
- 天気API(OpenWeatherMapなど)から無料のAPIキーを取得
- JavaScriptやPHPなどでAPIにリクエストを送信
- 返ってきたデータ(JSON形式)をサイト上に表示
# PythonでのAPI利用例
import requests
api_key = "あなたのAPIキー"
city = "Tokyo"
api_url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
response = requests.get(api_url)
data = response.json()
print(f"現在の{city}の気温: {data['main']['temp']}℃")
APIと非同期処理
Web APIを利用する際によく使われる概念に「非同期処理」があります。これはAPI通信の効率と応答性を高めるための重要な仕組みです。
非同期処理とは
通常、プログラムはコードを上から順に実行します(同期処理)。
しかし、APIリクエストのように時間がかかる処理では、結果が返ってくるまでプログラムが停止してしまうと、ユーザの利便性が下がります。
非同期処理では、APIリクエストを送信した後、結果を待つ間も他の処理を続行できます。結果が返ってきたら、それを処理する「コールバック」が実行されます。
非同期処理のメリット
- ブロッキングの回避: プログラムがAPIの応答を待つ間も他の処理を実行できる
- ユーザー体験の向上: Webアプリケーションがフリーズせず、応答性が向上する
- 効率的なリソース使用: 複数のAPIリクエストを並行して処理できる
注意点
非同期処理は便利ですが、コードが複雑になりがちで、エラー処理も難しくなることがあります。状況に応じて同期処理と非同期処理を使い分けることが重要です。
まとめ:APIを理解するメリット
APIを理解することで得られるメリットは以下の通りです。
- アプリケーションの可能性が広がる:外部サービスとの連携で機能拡張が容易に
- 開発効率の向上:車輪の再発明をせず、既存のサービスを活用できる
- ビジネスチャンスの拡大:自社サービスをAPI化して公開することも可能
- 異なるシステムの連携:異なるプラットフォーム間でのデータやり取りが簡単に
実際に公開APIを探して使ってみましょう!