2017-06-23 9 views
0

私はバックエンドとしてRESTful APIを使用するアンドロイドアプリを構築しています。 APIを将来のウェブサイトのデータソースとして、また場合によってはIOSアプリケーションとして使用する意向。RESTfulアプリバックエンド:Googleクラウドストレージから画像を正しく配信するにはどうすればよいですか?

apiは、Spring Bootで作成され、Herokuで実行されます。

私のアプリのGoogleクラウドストレージから画像を提供する適切な方法を見つけようとしていますが、私は混乱しています。

電子メール、名前などの列を持つユーザーエンティティ用のhavaデータベーステーブルです。これらの列の1つは、そのプロフィール画像のURIを保持することになっています。

私は、この時点から適切に安らかなやり方でやり遂げる方法が混乱しています。私は、これまでの私の考えを煮てきましたが、いくつかの問題があります。

画像をアップロードするには: ユーザーが.jpgのペイロードを持つusers/{id}/profilepicへのPOST要求を行います。その後、サーバーは画像をGoogle Cloud Storageにアップロードし(検証/認証後)、その画像のURLを取得してデータベース列に保存します。

イメージの取得: ユーザーはusers/{id}/profilepicにGETリクエストを行います。サーバーは、データベース内のプロフィール画像のURIを検索し、URIへの独自の要求で画像を取得し、画像を.jpgファイル(どのようにエンコードされていますか?)としてユーザーに返します。

問題 - 仲介の非効率性と認証/アクセス制御 - それは、サーバが、ここで中央の男の一種であるためには少し冗長な(そしておそらく遅い)のようだが、私はそれに利点を見ています。代わりに、フロントエンド(アプリ、ウェブサイトなど)にURLを送信し、フロントエンドでそれを取得できるようにすることもできますが、誰が画像にアクセスできるかを制御できません。

これはいいモデルですか?コードで実装するにはどうすればいいですか?これをカバーするチュートリアルはありますか?

答えて

1

あなたのアプローチはうまくいくようです。より効率的なオプションがありますが、セキュリティ、RESTfulnessなどの間でトレードオフを行う必要があります。

アップロード:クライアントはサーバーから次のアクセス許可を要求します。プロフィール写真をアップロードする(ユーザーにPOST/{id}/upload_profilepic)。サーバーは、その写真をアップロードするために使用するGoogle Cloud StorageのURLに署名し、ユーザーに渡します。ユーザーは、画像をGCSに直接アップロードします。

ダウンロード:GCSリソース(おそらく公開される)はよく知られているパターン(https://storage.googleapis.com/bucketname/users/ {id} /profilepic.jpg)を持っており、直接要求します。

+0

このパターンは、実際にアップロードが行われる限り、かなり良いと言えます。しかし、私は誰が何をダウンロードできるかを制御したいと思っています。私はそれをするためにいくつか考えているようです。これをコードでどのように実装するかを検討することも問題です。 – Airhead

+1

リソースを非公開にし、GET URLに署名してアクセスを許可することができます。 元の質問と同じパターンを使用しますが、ファイルサーバー側を取得する代わりに、署名されたURLにリダイレクトするだけです。 –

関連する問題