PythonにはAIのライブラリで優位性があり、
Node.jsにはNext.jsといったWebサイト構築する能力で優位性があります。
動機としてはよくある奴ですね。
PythonはDjango等のWebフレームワークがありますので、
HTTPリクエストを受け取ったらPythonの機能が動作して、
結果をJSON文字列で受け取る仕組みを構築できます。
HTTPリクエストを飛ばして結果を受け取る処理はどんな言語でも出来るので、
Node.jsはWebページ部分を完全に受け持っているが、
必要に応じて同じマシンのDjangoに向けてHTTPリクエストを発射してJSONを受け取って利用する。
こういう使い分けが可能となります。
Node.jsやPythonから次元を引き上げての解説
こういう同じマシンで使う事を意図したWebサーバは結構使えるテクニックです。
今回はPythonとNode.jsで説明しましたが、HTTPサーバとクライアントさえあれば出来るので、
ありとあらゆるプログラミング言語で可能な方法と言えるでしょう。
デメリットを上げるなら多少のオーバーヘッドがありますが、
それが許容できないならオーバーヘッドの少ない別のやり方をその時になって考えれば良いだけの話です。
例えばTCPやUNIXドメインソケットを使うとか
こいつらは使いづらいのでWebSocketを検討してみるのも良いかもしれないですね。
まぁ、最初そういう仕組みを作りたいなら同一マシン内でのWebサーバで十分です。
具体的なやり方です。
ポート番号は別に何番に設定しても構いませんが、
適当にNode.jsのNext.jsにTCP80、PythonのDjangoはTCP4000にしましょうか。
それぞれ80、4000番ポートで待ち受けるWebサーバを起動します。
Next.jsのAPIにアクセスしたら、必要に応じてlocalhost:4000
にアクセスしてJSONを使います。
SSLやログインの機能は全てNode.jsにもたせて、
権限チェックを通してからPythonに投げるような仕組みを構築すると良いでしょう。
Python部分も外に公開したければ、Nginx等のWebサーバソフトウェアのリバースプロキシの設定を利用する案があります。
NginxにTCP80番を設定して、Next.jsは3000番とかまた別のポート番号を与えておきます。
パス部で区切ってNode.jsやPythonにリクエストを受け流す設定にして実現できます。
参考記事: NGINX リバースプロキシ | NGINX 日本語訳