James Kirk

はじめに こんにちは。エウレカ APIチームのジェームスです。 最近Go言語でファイルをアップロードしたりするAPIクライントを作っていて、色々と学ぶことがありました。今回は基本に戻りマルチパートメッセージの仕様を考えながら、標準ライブラリのmime/multipartパッケージでファイルをアップロードする方法を紹介していきます。 全てのコードはサンプルレポジトリにあります。 マルチパートメッセージのおさらい マルチパートメッセージはHTTPのデータ転送に利用されることが多いですが、その定義はもともとSMTPメールのために設計されたMIME規格にあります。そのため、「メッセージ」などの通常HTTPリクエストに対して使わない単語が出たりします。 HTTPの場合は、ファイルのアップロードによく使いますが、「マルチパート」という名の通り複数のパート(ファイル、テキストなど)を1つのメッセージの中で転送するための形式です。パートはそれぞれ以下の要素からなります。

Go言語のmime/multipartパッケージでファイルをアップロードしましょう
Go言語のmime/multipartパッケージでファイルをアップロードしましょう

弊社アプリ情報サービスApplivへネイティブ広告を出すため、自社システムApplivAdを運営しています。今まではモノリシックなアーキテクチャで開発され、コード量が増えるにつれアプリケーションが複雑化してきました。 複雑化への対策としてマイクロサービス アーキテクチャへの移行を検討していますが、パフォーマンスが重視されるシステムでは、サービス間通信が大きな懸念点となります。分散コンピューティングの落とし穴はもちろん、サービス間の結合性からもさまざまな問題が生じます。 サービス間通信にRESTのAPIやgRPCなどの同期的なプロトコルが使われることが多いです。しかし、ApplivAdのような計測イベントの多いシステムでは、非同期的なプロトコルをも活かすことで、サービス間の結合性を低めるばかりかリアクティブマニフェストの実現により近づくことも可能になります。 SNS+SQSによる非同期メッセージ

SNS+SQSによるサービス間通信周りのものを簡単に実装してみた
SNS+SQSによるサービス間通信周りのものを簡単に実装してみた