0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フロントとバックエンドを完全分離しているシステムでのファイルダウンロード方式の検討

Last updated at Posted at 2023-02-18

前提

言語:Python3
フレームワーク:Django, Django REST API

概要

クライアントをWebブラウザを想定しているとあるWebシステムが、
クライアント側の画面制御等の処理を行うシステム、
業務ロジックやバッチやデータの返却などを行うシステムで完全にサーバーが分離している設計になっているとします。
(例)

スクリーンショット 2023-02-18 20.59.46.png

ファイルダウンロード機能を実装する場合に、ファイルダウンロードをどう実現するか?
ということについて検討した結果を記載させていただきます。

問題

通常の、フロントとバックエンドが一体となっているシステムと比較して難しい点は、
・フロント側でファイル実体を管理していない
・バックエンドAPI側は、ファイルをそのままフロント側のサーバーに送信できない(エラーになるため)

上記の2点だと考えております。

採用しなかった案

①バックエンドAPIに、ファイルダウンロード用の個別の画面を持って、
ファイルダウンロードの際には、フロント側のサーバーからバックエンド側のサーバーに遷移して、
ファイルダウンロード機能を実現する。
(不採用理由)>バックエンドは画面を持たない、文字列のIN/OUTのみの用途として扱いたかった

②別途ファイルサーバーを立てて、フロントサーバーはファイルサーバーからファイル実体を取得して、
ファイルダウンロード機能を実現する。
(不採用理由)>自宅にファイルサーバーとなるリソースが無かった

上記の2点の方法は、私が個人的に採用しなかった方法で、
これらの方法で十分だとは考えております。

採用した案

・バックエンドは文字列のIN/OUTのみにしたい
・システムに関連するサーバーを増やしたくない
上記の要望を実現するために私が選んだ方法は、ファイルのバイナリデータを文字列としてREST_APIで送信して、フロント側のサーバーでファイルを再構築する方式です。

(イメージ)
スクリーンショット 2023-02-18 21.11.16.png

上記の方式であれば、サーバーを増やすこと、バックエンドAPIに専用の画面を作成すること、などの作業をする必要がないため、一番簡単な方法だと考えております。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?