サイトアイコン ITC Media

PythonでAPIを使いこなす|リクエストからAPI構築まで

(最終更新月:2022年9月)

✔このような方へ向けて書かれた記事となります

「APIってなに?」

「PythonでAPIサービスを使うにはどうすればいいの?」

「APIサービスを使う実例が見たい!」

✔当記事を通じてお伝えすること

当記事ではAPIがどんなものかがわかるのはもちろん、どうすればAPIを使えるのかが具体例とともにわかります

ぜひ最後までご覧ください。

✔当記事の信頼性

当ブログではPythonをベースとしたフレームワーク「Django」の使い方を詳しく解説しています。

その中で自作したアプリを公開しています。

実際に自前で構築したAPIサービスとJavaScriptフレームワーク「React」をつかっているものになります。

Fun Tools
ReactとDjangoで作成したWebアプリです。便利なツールを揃えているので、ぜひ立ち寄ってみてください。作り方はブログで紹介しています!

当記事ではAPI構築の基本をお伝えしています。

リクエストヘッダーにトークンを含めて処理をおこないたい場合は、少し応用させる必要があります。

以下の記事にて、リクエストヘッダーのトークンを処理する方法を解説していますので、興味がある方はご覧ください。

Django REST Framework リクエストヘッダートークンを扱う方法|裕:ITCブログ運営
当記事では、Django REST Framework(DRF)で、トークン付きのヘッダーを受け取ったときの処理方法を解説します。 そもそも、DRFでのAPI構築方法が全くわからないという方はこちらをご覧ください。 PythonでAPIを使...

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

APIとは?

APIとは、Application Programming Interfaceの略称で、プログラムを共有する仕組みのことをいいます。

当記事ではAPIの中でも、使用する言語に縛りがないWeb APIについて解説をしていきます。

Web APIについて理解を深めるために以下をお伝えします。

ひとつずつ見ていきましょう。

Web APIの仕組み

Web APIの仕組みは、ユーザーはAPIプログラムのサーバーへリクエストをし、プログラム機能の結果をレスポンスとして受け取る、というものです。

図解すると以下のようになります。

Web APIでは、言語に縛られない「HTTP/HTTPS」による通信方法を採用しています。

HTTPもしくはHTTPSを使うことで、プログラミング言語に縛られず、好きな言語でリクエスト・レスポンスのやり取りができるようになります。

リクエスト・レスポンスってなに?

そもそもリクエスト・レスポンスとは何でしょうか?

簡単にいえば以下のように例えられます。

つまりこのやり取りを手伝うサーバーは、レストランのウェイターのような役割をしているといえます。

詳しくはこちらの記事で解説しています。

APIサービス事例一覧を紹介

Web APIを提供している有名なサービスは以下のとおりです。

たとえばTwitterのAPIサービスでは、以下のようなことが可能です。

Twitterでできるさまざまなことをプログラミング言語で実行できるようになります。

PythonでAPIにリクエストする方法

こちらではPythonでAPIサーバーにリクエストをする方法を説明します。

以下のページに簡単なAPIサービスを作ってみました。

https://api.itc-app.site/api-practice/plus/

「first_number」「second_number」と2つの数値を受けとり、足し算の解をレスポンスとして返す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とは、DjangoWeb APIを構築するためのライブラリです。

一般のWebアプリ作成のDjangoとは違い、ReactやVueなどの別言語フロントエンドフレームワークと組み合わせられるのがポイントです。

始めてみたい方はこちらの記事も合わせてご覧ください。

コードサンプル

こちらでは以下APIのコードを公開します。

詳しいurls.pyなどについては割愛してますが、API構築に必要なパートはこちらで充分でしょう。

https://api.itc-app.site/api-practice/plus/

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の利用や構築は簡単

当記事の内容をまとめます。

PythonでAPIにアクセスできるようになるとさまざまなアプリケーションが作れるようになります。

以下はChatGPTを使えるようにしたOpenAIのAPIを活用したアプリ例です。

【Python GUI】fletで作成するChatGPTアプリ - ITC Media
(最終更新月:2023年4月) 当記事では、Pythonをベースとしたfletで作成したChatGPTアプリの概要やその作り方を解説しています。 - 【Python GUI】fletで作成するChatGPTアプリ

リクエストヘッダーに、トークンを含めたい場合は、以下の記事を参考にしてください。

Django REST Framework リクエストヘッダートークンを扱う方法|裕:ITCブログ運営
当記事では、Django REST Framework(DRF)で、トークン付きのヘッダーを受け取ったときの処理方法を解説します。 そもそも、DRFでのAPI構築方法が全くわからないという方はこちらをご覧ください。 PythonでAPIを使...
モバイルバージョンを終了