前提
言語:Python3
フレームワーク:Django, Django REST API
概要
クライアントをWebブラウザを想定しているとあるWebシステムが、
クライアント側の画面制御等の処理を行うシステム、
業務ロジックやバッチやデータの返却などを行うシステムで完全にサーバーが分離している設計になっているとします。
(例)
ファイルダウンロード機能を実装する場合に、ファイルダウンロードをどう実現するか?
ということについて検討した結果を記載させていただきます。
問題
通常の、フロントとバックエンドが一体となっているシステムと比較して難しい点は、
・フロント側でファイル実体を管理していない
・バックエンドAPI側は、ファイルをそのままフロント側のサーバーに送信できない(エラーになるため)
上記の2点だと考えております。
採用しなかった案
①バックエンドAPIに、ファイルダウンロード用の個別の画面を持って、
ファイルダウンロードの際には、フロント側のサーバーからバックエンド側のサーバーに遷移して、
ファイルダウンロード機能を実現する。
(不採用理由)>バックエンドは画面を持たない、文字列のIN/OUTのみの用途として扱いたかった
②別途ファイルサーバーを立てて、フロントサーバーはファイルサーバーからファイル実体を取得して、
ファイルダウンロード機能を実現する。
(不採用理由)>自宅にファイルサーバーとなるリソースが無かった
上記の2点の方法は、私が個人的に採用しなかった方法で、
これらの方法で十分だとは考えております。
採用した案
・バックエンドは文字列のIN/OUTのみにしたい
・システムに関連するサーバーを増やしたくない
上記の要望を実現するために私が選んだ方法は、ファイルのバイナリデータを文字列としてREST_APIで送信して、フロント側のサーバーでファイルを再構築する方式です。
上記の方式であれば、サーバーを増やすこと、バックエンドAPIに専用の画面を作成すること、などの作業をする必要がないため、一番簡単な方法だと考えております。
以上です。

