(最終更新月:2022年9月)
✔このような方へ向けて書かれた記事となります
「APIってなに?」
「PythonでAPIサービスを使うにはどうすればいいの?」
「APIサービスを使う実例が見たい!」
✔当記事を通じてお伝えすること
- APIとは?Web APIとは?
- PythonをつかったAPIサーバーへのリクエスト・レスポンス
- PythonでAPIを構築するには?
当記事ではAPIがどんなものかがわかるのはもちろん、どうすればAPIを使えるのかが具体例とともにわかります。
ぜひ最後までご覧ください。
✔当記事の信頼性
当ブログではPythonをベースとしたフレームワーク「Django」の使い方を詳しく解説しています。
その中で自作したアプリを公開しています。
実際に自前で構築したAPIサービスとJavaScriptフレームワーク「React」をつかっているものになります。
当記事ではAPI構築の基本をお伝えしています。
リクエストヘッダーにトークンを含めて処理をおこないたい場合は、少し応用させる必要があります。
以下の記事にて、リクエストヘッダーのトークンを処理する方法を解説していますので、興味がある方はご覧ください。
APIとは?
APIとは、Application Programming Interfaceの略称で、プログラムを共有する仕組みのことをいいます。
当記事ではAPIの中でも、使用する言語に縛りがないWeb APIについて解説をしていきます。
Web APIについて理解を深めるために以下をお伝えします。
- APIの仕組み
- リクエスト・レスポンスについて
- APIサービス事例
ひとつずつ見ていきましょう。
Web APIの仕組み
Web APIの仕組みは、ユーザーはAPIプログラムのサーバーへリクエストをし、プログラム機能の結果をレスポンスとして受け取る、というものです。
図解すると以下のようになります。
Web APIでは、言語に縛られない「HTTP/HTTPS」による通信方法を採用しています。
HTTPもしくはHTTPSを使うことで、プログラミング言語に縛られず、好きな言語でリクエスト・レスポンスのやり取りができるようになります。
リクエスト・レスポンスってなに?
そもそもリクエスト・レスポンスとは何でしょうか?
簡単にいえば以下のように例えられます。
- リクエストは、「注文」
- レスポンスは、「注文された品物」
つまりこのやり取りを手伝うサーバーは、レストランのウェイターのような役割をしているといえます。
詳しくはこちらの記事で解説しています。
APIサービス事例一覧を紹介
Web APIを提供している有名なサービスは以下のとおりです。
- Coincheck
- Chatwork
- Slack
- LINE
たとえばTwitterのAPIサービスでは、以下のようなことが可能です。
- ツイートの投稿
- ツイートの取得
- ツイートの検索
- ユーザーの検索
- フォローやいいね
Twitterでできるさまざまなことをプログラミング言語で実行できるようになります。
PythonでAPIにリクエストする方法
こちらではPythonでAPIサーバーにリクエストをする方法を説明します。
以下のページに簡単なAPIサービスを作ってみました。
「first_number」「second_number」と2つの数値を受けとり、足し算の解をレスポンスとして返すAPIです。
以下の手順でリクエストからレスポンスまで解説していきます。
- モジュールのインポート
- APIエンドポイントの設定
- ヘッダーの設定
- 受け渡すデータを記述
- リクエストを投げる
- レスポンスを受け取ったあとの処理
モジュールのインポート
必要なモジュールは2つだけ。
以下のとおりインポートしましょう。
>>> import requests, json
APIエンドポイントの設定
APIサービスのエンドポイント(URL)を格納しておきます。
誰でも使える簡単なAPIなのでこのままぜひ試してみてください。
>>> ep = "https://api.itc-app.site/api-practice/plus/"
ヘッダーの設定
ヘッダーで送信するデータの型などを指定します。
>>> headers = {"Content-Type": "application/json"}
使用するサービスによっては、トークンキーなどをヘッダーに組み込みます。
受け渡すデータを記述「jsonモジュール」
jsonモジュールをつかって、データをJSON型に書き換えます。
>>> data = {"first_number":5, "second_number": 10}
>>> json_data = json.dumps(data)
またこちらのAPIでは、「first_number」「second_number」の2つ以外はエラーとなりますので、注意してください。
リクエストを投げる「requestsモジュール」
requestsモジュールのPOSTメソッドをつかって、リクエストし、レスポンスを受け取ります。
>>> res = requests.post(ep, data=json_data, headers=headers)
requests.postメソッドは、以下のとおりの構成です。
request.post(APIサービスのURL、JSON型のデータ、ヘッダー)
「res」にはレスポンスが入ります。
レスポンスを受け取ったあとの処理
レスポンスの中身を見てみましょう。
>>> print(res)
<Response [200]>
>>> print(res.text)
'{"answer":15}'
>>> print(type(res.text))
<class 'str'>
レスポンスをprintすると、ステータスが表示されます。
200は正しくレスポンスを受け取ったことを意味します。
text属性に実際のレスポンスが格納されています。
ただし、res.textのままでは全体が文字列なので、辞書型に戻しておくほうがよいでしょう。
>>> res_json = json.loads(res.text)
>>> res_json
{'answer': 15}
>>> type(res_json)
<class 'dict'>
>>> res_json.get("answer")
15
実際のAPIサービスで試したい方はTwitterなどで試してください。
Python API構築の方法
前章でも作成したAPIの構築方法を解説していきます。
実際の構築はPythonのフレームワーク「Django」をつかっています。
以下のとおり順を追って解説します。
- Django REST Frameworkとは
- コードサンプル
Django REST Frameworkとは
Django REST Frameworkとは、DjangoでWeb APIを構築するためのライブラリです。
一般のWebアプリ作成のDjangoとは違い、ReactやVueなどの別言語フロントエンドフレームワークと組み合わせられるのがポイントです。
始めてみたい方はこちらの記事も合わせてご覧ください。
コードサンプル
こちらでは以下APIのコードを公開します。
詳しいurls.pyなどについては割愛してますが、API構築に必要なパートはこちらで充分でしょう。
views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from tools.api.serializers import ApiPracticeSerializer
class ApiPracticeView(APIView):
def post(self, request, format=None):
data = request.data
serializer = ApiPracticeSerializer(data=data)
if serializer.is_valid():
valid_data = serializer.data
first_one = valid_data.get("first_number")
second_one = valid_data.get("second_number")
return Response({"answer":first_one + second_one})
serializers.py
from rest_framework import serializers
from django.core.validators import MaxValueValidator, MinValueValidator
class ApiPracticeSerializer(serializers.Serializer):
first_number = serializers.IntegerField(validators=[MaxValueValidator(50), MinValueValidator(1)])
second_number = serializers.IntegerField(validators=[MaxValueValidator(50), MinValueValidator(1)])
まとめ:Pythonを使えばAPIの利用や構築は簡単
当記事の内容をまとめます。
- APIとは、別プログラムからでも機能を使えるようにする仕組み
- APIのリクエストには、requests、jsonモジュールが必要
- Django REST Frameworkを使えば簡単にAPI構築ができる
PythonでAPIにアクセスできるようになるとさまざまなアプリケーションが作れるようになります。
以下はChatGPTを使えるようにしたOpenAIのAPIを活用したアプリ例です。
リクエストヘッダーに、トークンを含めたい場合は、以下の記事を参考にしてください。