個人で画像投稿系のwebサービスを作っており、今日は画像アップロード用のAPIのコーディングを進めました。 以下簡単なメモ。
APIの処理としては下記のような感じで設計しようと思ってます。 まだまだ設計に粗いところあると思いますが、まずは動くもの作ることを大事にして、想定通り動いたあとでリファクタリングかけていきます。
画像アップロードAPIの処理の流れ
フロントエンドから画像データとその他のパラメータ(タイトル、ユーザーIDなど)をmultipart/form-dataで受け取る
↓
画像データのファイル名と同じ名前のファイルをtmpディレクトリに新規作成(Goではビルドイン関数のos.Create()でファイル作成可能)
↓
引数で受け取った画像データをtmpディレクトリに作成したファイルにコピー
↓
tmpディレクトリのファイルをS3にアップロード用の関数に渡す
↓
S3にアップロードされる(AWS SDKの細かい処理はこの記事では割愛)
↓
S3にアップロード成功したら処理続行、失敗だったらフロントにエラーを返す。
↓
S3にアップロードしたオブジェクトのURLをAPIの処理に使えるように変数に格納する
↓
引数のユーザーID、タイトルなどを取得する
↓
ユーザーID、タイトル、S3のオブジェクトURLをDBに格納する
↓
フロントエンドに処理結果を返す
コーディングで苦戦した箇所
userID := c.FormValue("user_id")