今日から使えるAPI!基本概念からHTTP通信、Pythonでの実装まで網羅解説

この記事は、APIについて初めて学ぶ方や、基本的な仕組みを理解したい開発者向けです。

以前当ブログでは、addition.pyにより、追加機能の開発をしました。

せっかくなのでもう少しリッチな作りにしようと思います。

APIをコールして、外部からデータ取得を行う方法です。

さて、その前に,APIとはなにか?を、この記事では解説いたします。

APIって何?Webサービス開発に欠かせないAPIの基本を知りたいという方は是非ご参照ください。

APIとは

APIの基本概念

APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略です。難しく聞こえますが、実は私たちの日常生活に例えると理解しやすくなります。

レストランを想像してみてください。お客さん(あなた)がウェイター(API)に料理(データやサービス)を注文します。ウェイターはその注文をキッチン(サーバーやシステム)に伝え、料理ができたらあなたのテーブルまで運んできます。この時、あなたはキッチンの中がどうなっているか知らなくても、美味しい料理を楽しめますよね。

APIも同じです。あなたのアプリケーションが別のアプリケーションやサービスと通信するための「窓口」として機能します。内部の複雑な処理を知らなくても、必要な機能やデータをやり取りできる便利な仕組みなのです。

APIで解決できることは何か?

APIが存在しなかったら、プログラム同士が連携するたびに、相手の仕組みを完全に理解して直接コードを書き換える必要があります。これは非常に大変で時間もかかります。

APIがあれば以下のようなことが容易に達成できます。

  • 内部構造を知らなくても必要な機能を利用できる
  • 決められた方法で「お願い」するだけで目的を達成できる
  • システム間の連携が格段に簡単になる

APIの種類と仕組み

APIには大きく分けて以下の種類があります。

  1. ライブラリAPI:プログラミング言語に組み込まれた関数やクラスなど
  2. OS API:オペレーティングシステムが提供する機能へのアクセス方法
  3. 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の主な特徴

  1. リソース指向:データやサービスを「リソース」として考え、URLで識別します
  2. HTTPメソッドの活用:GET(取得)、POST(作成)、PUT(更新)、DELETE(削除)などの標準的な操作方法を使います
  3. ステートレス:各リクエストは独立しており、前のリクエストの状態に依存しません

ブログ記事を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との通信は「リクエスト」と「レスポンス」のやり取りです。

  1. HTTPリクエスト:クライアント(あなたのアプリ)からサーバーへの要求
    • メソッド(GET, POST, PUT, DELETEなど)
    • URL(エンドポイント)
    • ヘッダー(追加情報)
    • ボディ(送信データ、必要な場合)
  2. 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でやり取りされるデータは主に以下の形式が使われます。

  1. JSON(JavaScript Object Notation):最も一般的{ "id": 123, "title": "APIについて", "author": "山田太郎" }
  2. 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活用例

天気予報を表示する

例えば、あなたのウェブサイトに天気予報を表示したい場合。

タスク

  1. 天気API(OpenWeatherMapなど)から無料のAPIキーを取得
  2. JavaScriptやPHPなどでAPIにリクエストを送信
  3. 返ってきたデータ(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リクエストを送信した後、結果を待つ間も他の処理を続行できます。結果が返ってきたら、それを処理する「コールバック」が実行されます。

非同期処理のメリット

  1. ブロッキングの回避: プログラムがAPIの応答を待つ間も他の処理を実行できる
  2. ユーザー体験の向上: Webアプリケーションがフリーズせず、応答性が向上する
  3. 効率的なリソース使用: 複数のAPIリクエストを並行して処理できる

注意点

非同期処理は便利ですが、コードが複雑になりがちで、エラー処理も難しくなることがあります。状況に応じて同期処理と非同期処理を使い分けることが重要です。

まとめ:APIを理解するメリット

APIを理解することで得られるメリットは以下の通りです。

  1. アプリケーションの可能性が広がる:外部サービスとの連携で機能拡張が容易に
  2. 開発効率の向上:車輪の再発明をせず、既存のサービスを活用できる
  3. ビジネスチャンスの拡大:自社サービスをAPI化して公開することも可能
  4. 異なるシステムの連携:異なるプラットフォーム間でのデータやり取りが簡単に

実際に公開APIを探して使ってみましょう!