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

※本サイトにはプロモーション・広告が含まれています。

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

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

「APIってなに?」

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

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

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

  • APIとは?Web APIとは?
  • PythonをつかったAPIサーバーへのリクエスト・レスポンス
  • Pythonで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を使...

筆者プロフィール

筆者プロフィールアイコン

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

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

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

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

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

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

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

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

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

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

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

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を提供している有名なサービスは以下のとおりです。

  • Twitter
  • Coincheck
  • Chatwork
  • Slack
  • LINE

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

  • ツイートの投稿
  • ツイートの取得
  • ツイートの検索
  • ユーザーの検索
  • フォローやいいね

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

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

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

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

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

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

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

  • APIとは、別プログラムからでも機能を使えるようにする仕組み
  • APIのリクエストには、requests、jsonモジュールが必要
  • Django REST Frameworkを使えば簡単にAPI構築ができる

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

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

【Python GUI】fletで作成するChatGPTアプリ
PythonでGUIを作成するアプリが作りたいですか?当記事では、ChatGPTのデスクトップアプリについて紹介しています。すべて自作でその概要からコード、動画の紹介までしています。fletに触ったことない人でも理解できるよう紹介していますので、初心者の方は必見です。

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

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