PHPとPythonで実現する!簡単API連携のステップバイステップガイド

PHPとPythonで実現する!簡単API連携のステップバイステップガイド プログラミング

プログラミングの世界では、異なる言語間の連携が非常に重要な役割を果たしています。
近年、Pythonの役割が特に注目されています。

Pythonは、そのデータ処理能力や機械学習機能において、他の言語を圧倒する力を持っています。
しかし、Web開発の領域では、Pythonが主役を務める場面はそれほど多くはありません。

現在、PHPは依然として多くのWeb開発プロジェクトで広く使われています。
例えば、Laravelフレームワークを使用すると、Webアプリケーションの開発が驚くほど簡単になります。

この記事では、PHPとPythonを組み合わせた開発方法について紹介します。
これらの言語を連携させる方法には、主に以下のようなアプローチがあります。

  • スクリプト実行
  • API呼び出し(自作)

今回は、API呼び出し(自作)について解説します。
スクリプト実行については、以下をご覧ください。

API呼び出しのメリット

コマンドによるスクリプト実行によるプログラム間の連携は、非常に簡単です。
ただ、簡単がゆえに問題も含んでいます。

ざっと挙げただけでも、以下の点で問題というか課題があります。

  • セキュリティ
  • スケーラビリティ
  • メンテナンスと拡張性

小規模アプリケーションだとコマンド実行で全然問題ありません。
しかし、大規模アプリケーションとなると話は別です。

そのため、API呼び出しによるアプローチは重要なモノとなっています。
APIにすれば、コマンド実行における問題は解決できます。

加えて、以下のメリットがあります。

  • 疎結合性
  • プラットフォーム間の互換性
  • リアルタイム処理

APIにしておけば、どんな言語からでも呼び出し可能です。
そして、自ずと疎結合なシステムとなります。

疎結合については、次の記事内で詳しく説明しています。

とにかく、プログラム間の連携をAPI呼び出しにすることはメリットが多いと言えます。
もちろん、コマンド実行の場合のときほど簡単とは言えません。

でも、一度でも理解さえしてしまえば何てことはありませんけどね。

PHPからPythonで開発されたAPIを呼び出す

まず、PythonでAPIを用意する必要があります。
APIと言うと、ApacheやNginxなどのWebサーバーを用意しないといけないイメージがあるかもしれません。

もちろん、Webサーバーを動かす方法もあります。
しかし、Webサーバーが不要な方法も存在しています。

それでいて、非同期処理で大量アクセスを捌くことが可能な方法があるのです。
そんなことを可能にするのが、Tornadoとなります。

導入も非常に簡単ですぐにAPIを作成できます。
インストールできたら、次のコードが動くはずです。

api.py

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        result = 5 + 3  # 何らかの処理
        self.write({"result": result})  # JSON形式で結果を出力

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

このコードでは、ルートURL (/) にGETリクエストが来たときに、5と3を加算してその結果をJSON形式で返します。
以下のコマンドで実行すると、サーバーはポート8888で待機しています。

$ python api.py

この状態で、別ターミナルから下記コマンドにより対象のポートにアクセスします。

$ wget http://localhost:8888 

そうすると、「index.html」が保存されます。
ファイルの内容は、以下となっているはずです。

{"result": 8}

これで、APIの準備は整いました。
あとは、PHPからこのAPIを呼び出すだけです。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost:8888/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;

上記のコードを含むPHPスクリプトにアクセスすると、次のように表示されます。

今回は、PHPとPythonともに同じマシン上で動く想定です。
もちろん、それぞれ別々のマシンに分けることができます。

その場合は、ネットーワークの知識などが必要となります。
この記事に需要があれば、別々のマシンに分ける方法を記事にしたいと思います。

タイトルとURLをコピーしました