バイナリデータを簡単に送信する方法：サーバーインテグレーションガイド

## はじめに
バイナリデータをファイルとして保存したものをバイナリファイルと呼びます。サーバーへバイナリデータを送信することは、データサイズの削減、処理速度の向上、様々なデータ表現の実現などのメリットがあります。本文では、バイナリデータの基本情報を解説した上、使いやすいツールを使ってバイナリデータを簡単にサーバーに送信する方法を皆さんに紹介します。

:::note info
もし、APIやアプリケーションを開発しており、強力なAPIツールとのシームレスな統合が必要であれば、ぜひ無料でApidogをお試しください！[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)は、洗練されたユーザーインターフェースの構築に集中しながら、APIのスムーズな連携を実現するための理想的なツールです。
:::

## バイナリデータとは
バイナリデータとは、二進数のデータを意味して、コンピュータが内部的に使用する2進数(0と1)のデータのことを指します。コンピュータが「0」と「1」の２文字しか解釈できないため、コンピュータがデータを読み取れるため、バイナリデータが非常に汎用されています。具体的には、バイナリデータは次のような特徴があります：
- テキストデータではなく、人間に直接読み取れないデータフォーマットである
- 0と1のビットの並びで表現される
- 画像ファイル、動画ファイル、実行ファイルなど、コンピュータが処理・実行するためのデータがこれに該当する
- テキストよりも小さいデータサイズで表現できる場合が多い
- エンコード/デコードすることでテキストデータとの変換が可能


バイナリデータを扱う場合、特別な注意が必要です。例えば人間が直接編集できないため、バイナリエディタという専用ツールを使用することが多いです。

### バイナリファイルとは？
バイナリデータを保存するファイルをバイナリファイルと呼ばれています。実際には、我々もバイナリファイルを毎日も扱っています。バイナリファイルにはさまざまな種類がありますが、主なものとしては以下があげられます。

**1. 実行ファイル**
- Windowsのexeファイル、LinuxのELFファイルなど
- プログラムを実行するのに必要な機械語やデータが含まれる


**2. 画像ファイル**
- JPEG、PNG、GIFなどの画像データが含まれる
- 圧縮されていることが多い


**3. 動画ファイル**
- MP4、AVI、MKVなどの動画データが含まれる
- 画像よりも大きなデータサイズであることが多い


**4. 文書ファイル**
- Microsoft WordのDOCXファイル、PDFファイルなど
- テキストや画像、レイアウトデータが含まれる


**5. 圧縮ファイル**
- ZIP、RAR、7zなどによる圧縮データ
- 容量削減やまとめた保存ために用いられる


この他にも音楽ファイルや各種データベースや通信ログなど、コンピュータが扱うほとんどのデータはバイナリ形式で保存されています。

## バイナリデータのアップロードについて
上記のように、コンピューターは、バイナリデータのみを扱えますので、実際にWebアプリの開発中に、ファイルをバイナリデータのフォーマットでアップロードするのがごく一般です。それでは、なぜかバイナリデータというフォーマットでファイルをアップロードしますか？実際には、様々なメリットがあると思います。

### データサイズを小さくできる
テキストデータと比べて、同じ情報量をより小さいデータで表現できることがあります。容量削減が可能なため転送や保存に適しています。

### 処理速度が速い
文字列処理に比べて単純なデータ構造の方がコンピュータの処理速度は速くなります。大量のデータを高速に扱う用途に適しているためです。

### 様々なデータ表現ができる
文字だけでなく画像、音声、動画など、コンピュータが扱うほぼすべてのデータをバイナリ形式で表現できます。複合的なデータを1つにまとめることができる利点があります。

### ハードウェアやOSとの親和性が高い
コンピュータのハードウェアやOSが操作するのは機械語のバイナリ命令です。ハードウェアに依存しない抽象的な表現よりも、バイナリデータの方が親和性が高く効率的となります。

以上の理由から、様々な場面でバイナリフォーマットが活用されているのです。欠点もあるので、用途に応じて適切なデータ表現を選択することが大切です。

## Apidogでバイナリデータをサーバーに送信
[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)は、非常に包括的な[API管理ツール](https://apidog.com/jp/)として、APIの設計、仕様書生成、開発、テスト、モックなどにも対応しています。Apidogを利用して、APIのサーバーサイドにバイナリデータを送信することも非常に簡単です。



**ステップ⒈**既存のAPIを開くか、新しいAPIを新規に作成して、APIエンドポイントのURLを入力した上、HTTPメソッドをPOSTに指定します。

![file-upload-api-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/d6680199-4049-da4e-f6b2-51d094eea3c7.png)

**ステップ⒉**「**Body**」タブに切り替え、Content-Typeを「**Binary**」にし、ここでバイナリデータを選択してアップロードすることができます。

![binary-apidog-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/fbe0590d-282d-0dfa-626b-b3c345d15aa6.png)

バイナリファイルをアップロードした上、「**送信**」ボタンをクリックして、このバイナリファイルをサーバーに送信することができます。


## Axiosでバイナリデータをサーバーに送信
また、コーディング能力があるユーザーは、Axiosを利用してバイナリデータをサーバーに送信することも可能です。

### ステップ⒈FromDataオブジェクトの作成
まずはバイナリデータをFromDataオブジェクトに追加する必要があります。FromDataは、テーブルのフォーマットでデータをサーバーに送信します。
```
let formData = new FormData();
formData.append('file', binaryData, 'filename.ext');
```

ここでの `'file'` はサーバーサイドがで取得したファイルのフィールド名なり、`binaryData` はアップロードしたバイナリデータになります。このバイナリデータはファリル（ `<input type="file">` から取得するファイル）か、任意のBlobオブジェクトです。また、`'filename.ext'` はサーバーに保存しようとするファイル名になります。

### ステップ⒉Axiosの設定
そして、Axiosでリクエストを設定する必要があります。特に `headers` です。ファイルをアップロードするので、ブラウザが自動的に `Content-Type` を `multipart/form-data` に設定されるので、非常に便利です。
```
const config = {
  headers: {
    // `Content-Type` はブラウザに自動的に設定される
    'Accept': 'application/json', // サンプルです、実際のニーズに従って設定
  },
};
```

### ステップ3. リクエストの送信
最後に、Axiosを利用してこの `formData` オブジェクトを送信します。
```
axios.post('your-server-endpoint', formData, config)
  .then(response => {
    // 处理成功的响应
    console.log(response.data);
  })
  .catch(error => {
    // 处理错误
    console.error(error);
  });
```
  
ここの `'your-server-endpoint'` は、ファイルをアップロードしたいサーバーのエンドポイントURLになります。

**ご案内**：サーバーサイドも `multipart/form-data` のリクエストを受信できて、ファイルを処理できるように正しく設定する必要があります。

## まとめ
ApidogはAPIの设計やテスト、モックを支援する包括的なプラットフォームです。このApidog上でバイナリデータの送信は簡単に実現できます。具体的にはAPIエンドポイントを設定し、Bodyタブのコンテンツタイプをバイナリに指定した上で、バイナリファイルを選択・アップロードします。送信ボタンを押すことで、指定したAPIに対してそのバイナリデータが送信されるという流れです。

このようにApidogを活用することで、API開発者はコードを書くことなく、バイナリデータをサーバーに送信するテストが可能となります。ただし、バイナリデータの取り扱いにはその特性上、セキュリティ等の観点から注意が必要です。

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**