Pythonで湧き水APIを触ってみる+LambdaでAPIを自作してみる

はじめに

インターネット上でデータをやり取りする際、APIは非常に便利なツールです。

APIを利用することで、さまざまなデータにアクセスしたり、サービスを実行したりすることができます。

しかし、「APIを自分で使うにはどうすればいいの?」と疑問を持つ方も多いかもしれません。

本記事では、APIの基本的な概念から始め、自分でAPIを実行し、その応答を確認する方法を紹介します。

前半でAPIとは何かを説明した上で、Pythonを使って実際にAPIを呼び出し、データを取得する体験をしてみましょう。

そして後半では、AWS Lambdaを使用して自分で関数(API)を作成しLambda上でのテストとVScodeを使用してPythonで自作API呼び出しまでを行います。

この記事は以下のような人におすすめです。

  • APIを実行する方法が知りたい
  • AWS Lambdaを使用した関数作成の方法が知りたい

記事の構成

【前半】

APIとは何か?というところから湧き水APIを呼び出して応答を確認するところまでを行います。

1. APIって何?

2. 湧き水APIとは?

3. APIの取得方法

4. 湧き水APIをPythonで実行してみる

【後半】

前半でAPIを使用した体験を元に、今度は自作APIを作成し、Pythonで実行するところまでを行います。

API作成にはAWS Lambdaを使用します。

5. AWS Lambdaとは?

6. Lambdaで関数を作成

7. デフォルトのコードを書き換える

8. テストコードを実行する

9. 関数URLから応答を確認する

10. 自作APIをPythonで実行してみる

【前半】Pythonで湧き水APIを実行してみる

使用環境

OS:Windows 11

Pythonバージョン:3.12.6

使用ライブラリ:requests、dotenv

インストールされていないライブラリがある場合は下記コマンドを実行しインストールを行なってください。

1pip install requests2pip install python-dotenv
  • APIとは?

APIとは「Application Programming Interface」の略で、ソフトウェアやサービス間でデータやコマンドをやり取りするための仕組みです。

APIは、異なるプログラムやサービス間の通訳や橋渡しの役割を果たします。

特定のルール(プロトコル)に従ってリクエストを送り、必要なデータを受け取ります。

開発者はこの仕組みを利用することで、一から複雑な機能を作る必要がなく、既存のサービスの機能を自分のアプリに組み込むことができます。

無料のものから有料のものまで様々なAPIが公開されています。

  • 湧き水APIとは?

下記サイトで公開されている「湧き水検索」というAPIのことで、

全国の湧き水の場所をJSON形式で返してくれます。

image.png
  • 湧き水APIの取得方法

旅々APIに載っているAPIを使用するためにはリブログアカウントの登録が必要なので、下記サイトからアカウントの新規登録を行います。

ログインしたら、画像のAPIページにアクセスします。

image.png

トークンを生成をクリックし、APIトークンを発行します。

image.png

APIトークンの取り扱いについて
絶対に他の人にトークンが漏れないように管理してください。
流出すると、APIが不正利用されてしまいます。

  • 実際にPythonで実行してみる

まず、湧き水検索の一覧取得をクリックしてGETの部分をコピーします。

image.png

次にこのコードをPythonに変換します。

生成AIに「これをPythonで実行できるようにして」とコードと一緒に質問を投げます。

今回は以下のコードが生成されました。

愛知県に絞って湧き水の場所を標示してくれます。

1wakimizu.py2import os3import requests4import json5from dotenv import load_dotenv67# .envファイルから環境変数を読み込む89load_dotenv()1011# APIのURL1213url = "https://app.livlog.xyz/webapi/v2/spring-water/list"1415# パラメータの設定1617params = {18    "pref": "愛知県"  # エンコード済みのパラメータ19}2021# 環境変数からトークンを取得2223api_token = os.getenv("API_TOKEN")2425# ヘッダーの設定2627headers = {28    "Accept": "application/json",29    "Authorization": f"Bearer {api_token}"  # トークンが必要な場合30}3132try:3334# APIリクエストの送信3536    response = requests.get(url, params=params, headers=headers)3738# ステータスコードの確認3940    if response.status_code == 200:4142# JSONデータの取得4344        data = response.json()45        46# 結果の表示4748        print(json.dumps(data, indent=2, ensure_ascii=False))49    else:50        print(f"エラー: ステータスコード {response.status_code}")51        print(response.text)5253except requests.exceptions.RequestException as e:54    print(f"リクエストエラー: {e}")

コードの中で環境変数からトークンを取得してくる部分があります。

1wakimizu.py23# 環境変数からトークンを取得45api_token = os.getenv("API_TOKEN")

今回は同じフォルダ内に .env というファイルを作成してトークンを取得できるようにしましょう。

.envファイルとは、データベースのパスワードやAPIキーなど、アプリケーションの動作に必要な秘密の情報を含んでいるファイルです。

このファイルを使うことで、環境変数をまとめて管理できるようになります。

通常、環境変数はOSに設定する必要がありますが、.envファイルを使えば、OSの設定に頼らず、アプリケーションが起動時にこのファイルから必要な変数を読み込んで使用できます。

今回はwakimizu.pyで、API_TOKENの値を取得すると表記されているので、 .envは以下のような内容にします。

1.env2API_TOKEN = 生成したAPIトークン

GitHubに上げる際の注意点
.envのように誰にも見られたくないファイルをgitに上げる際は
.gitignoreでファイルを無視する設定を行うようにしてください。

これでAPIを呼び出す準備が整ったので、実行すると…

無事Pythonで湧き水の情報を表示できました!

image.png

今回は愛知県でしたが、千葉県の湧き水を指定することもできます。

1wakimizu.py23# パラメータの設定45params = {6    "pref": "愛知県"  # エンコード済みのパラメータ7    #ここを千葉県に変える8}
image.png
千葉県の湧き水の場所を表示することができました!

【後半】AWS LambdaでAPIを自作してみる

それでは、今度はAPIを自作してみましょう。

今回はAWS Lambdaを使用します。

  • AWS Lambdaとは?

プログラムを書いて動かすためにサーバーを管理する必要がなく、コードを書けば自動的に実行してくれるAWSサービスです。

たとえば、何かイベント(データがアップロードされたり、ボタンがクリックされたり)が発生したときに、そのイベントに反応してプログラム(Lambda関数)が実行されます。

  • Lambdaで関数を作成

まず、AWSコンソールにログインしLambdaの関数ページに移動します。

image.png

関数の作成をクリックし、画像の通り設定を行います。

ランタイム:Python 3.12

アーキテクチャ:arm64

設定ができたら下にスクロールして作成します。

image.png
これで関数が作成できました。

これで関数が作成できました。

image.png
  • デフォルトのコードを書き換えてみる

コードはデフォルトだと、Hello from Lambda!を返してくれるだけの内容になっています。

image.png

Lambdaの部分をクエリパラメータから取得した名前になるように変えてみます。

image.png
1practice_my_api23import json45def lambda_handler(event, context):67# クエリパラメータから名前を取得89    name = event.get('queryStringParameters', {}).get('name', 'Lambda')10    11# レスポンスメッセージを作成1213    message = f'Hello from {name}!'14    15# レスポンスを返す1617    return {18        'statusCode': 200,19        'body': json.dumps(message)20    }
  • テストを作成して、応答をテストする

テストコードを用いて挙動を確認することが出来ます。

テストタブに移動し、新しいイベントを作成からテストを新規作成します。

今回、名前はtestにして何も変更せず保存します。

image.png

変更を行っていない状態でテストを行い返答を確認してみます。

このコードではnameを指定していないので、Hello from Lambda!が返ってきました。

image.png

テストコードを以下の内容に書き換えます。

クエリパラメータのnameをJohnにするという内容です。

image.png
1test2{3  "queryStringParameters": {4    "name": "John"5  }6}

保存したあとに、テストをクリックします。

詳細▶を開くと、テスト結果が表示されて、応答がJohnに代わっていることを確認できました。

image.png
  • 関数URLから応答を確認する

関数URLから応答を確認します。

まず、設定タブに移動し、関数URLをクリックします。

image.png

今回は後ほどPythonで実行するため、認証タイプを NONE にします。

これで世界にAPIを公開することが出来ます。

image.png

APIの公開範囲について
APIのセキュリティや用途によって選択してください。

  • AWS_IAM
    APIを使える人やシステムをIAMユーザーやロールで制限できます。
    つまり、AWSアカウントに登録されているユーザーやサービスだけがAPIにアクセスできるようになります。
  • NONE
    特別なアクセス制限をかけない設定で、APIに誰でもアクセスできる状態になります。
    APIがインターネット上に公開されていて、アクセスするために特別な認証は必要とされません。

これで関数URLを作成できました。

クリックしてアクセスしてみます。

image.png
応答が返ってきました。

nameのクエリパラメータをこちらで指定していない為、Lambdaのままになっています。

image.png

URLを変更してnameに任意の名前を入れてみます。

awsの末尾に ?name=(任意の名前) を追加します

今回はKCと入れます。

image.png
URLを更新すると”Hello from KC!”と表示されました。

URLを更新すると”Hello from KC!”と表示されました。

image.png

自作APIをPythonで実行してみる

最後に湧き水APIのように自作APIを呼び出してみましょう。

下記のコードを使用します。

nameと定義した変数に値を入れると、nameのクエリパラメータがその値に変更されて表示されます。

今回は、nameをnaitoとします。

1hello_lambda.py2import requests34def get_response(name):5        url = f"[自分の関数URL]/?name={name}"6    7    try:8        response = requests.get(url)9        response.raise_for_status()  # エラーがあれば例外を発生させる10        return response.json()11    except requests.RequestException as e:12        return f"エラーが発生しました: {e}"1314# 使用例1516name = "naito"17result = get_response(name)18print(result)

Hello from naito!と返ってきたので、関数の実行は成功です!

image.png

まとめ

本記事ではAPIを使う、作るといったことを行いました。

サーバーレス環境であるLambdaを使うことで、簡単に関数を作成し、呼び出すことができました。

今回はシンプルな関数を作成して呼び出しただけなので、スケーリング機能は活用していませんが、その手軽さがとても印象的でした。

また、今回は「自作して自分で実行してみる」という部分に重点を置いたため、Lambdaの設定は最小限に留めています。

実際に運用する際には、認証やアクセス制限などセキュリティ面の設定を十分に行うことを推奨いたします。

少しでもこの記事が参考になりましたら幸いです。

読んでいただきありがとうございました!

この記事を書いた人

aws-recipe-user