APIにHTTPの代わりにMQTTを使用すべき時とは?

Ashley Innocent

Ashley Innocent

13 3月 2026

APIにHTTPの代わりにMQTTを使用すべき時とは?

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

要約

バッテリーが制限されている、ネットワークが不安定な、またはパブリッシュ/サブスクライブ(pub-sub)メッセージングパターンを使用するIoTデバイスにはMQTTを使用してください。標準的なウェブ/モバイルAPIにはHTTPを使用してください。MQTTは2バイトのヘッダーを使用するのに対し、HTTPは100バイト以上を使用するため、制約のあるデバイスに最適です。Modern PetstoreAPIは、ペット追跡用首輪やスマート給餌器にMQTTを実装しています。

はじめに

あなたのペット追跡用首輪は、5分ごとに位置情報を送信する必要があります。この首輪は、6ヶ月持続するはずのコイン型電池で動作します。HTTPを使用すると、バッテリーは2週間で切れてしまいますが、MQTTを使用すると、丸6ヶ月持ちます。

HTTPはAPIの標準ですが、IoTデバイスではなくウェブブラウザ向けに設計されています。MQTT (Message Queuing Telemetry Transport) は、帯域幅が制限され、ネットワークが不安定な制約のあるデバイス向けに作られました。

Modern PetstoreAPIは、ウェブおよびモバイルアプリにはHTTPを使用し、ペット追跡用首輪、スマート給餌器、ヘルスモニターなどのIoTデバイスにはMQTTを使用しています。

💡
IoT APIを構築またはテストしている場合、ApidogはHTTPと並行してMQTTのテストをサポートしています。pub-subパターンをテストし、メッセージ形式を検証し、ネットワーク障害をシミュレートできます。
ボタン

このガイドでは、MQTTがHTTPに勝る状況、Modern PetstoreAPIの実例、そしてあなたのユースケースに合った適切なプロトコルの選び方について学びます。

MQTTとは?

MQTTは、IoT向けに設計された軽量なpub-subメッセージングプロトコルです。

MQTTの仕組み

デバイスはトピックにメッセージを公開します。他のデバイスはトピックを購読します:

Publisher (Pet Collar):
  Topic: pets/019b4132/location
  Payload: {"lat":37.7749,"lng":-122.4194,"battery":85}

Subscriber (Mobile App):
  Subscribe to: pets/019b4132/location
  Receives: {"lat":37.7749,"lng":-122.4194,"battery":85}

MQTTブローカーが中央に位置し、発行者から購読者へメッセージをルーティングします。

MQTTの主要機能

1. 軽量ヘッダー - MQTT: 2バイト、HTTP: 100-500バイト

2. 持続的な接続 - MQTTは接続を維持します

3. サービス品質 (QoS) - 配信保証のためのQoS 0/1/2

4. 遺言 (Last Will) - デバイスが予期せず切断された場合に送信されるメッセージ

5. 保持メッセージ (Retained messages) - ブローカーは新しい購読者のために最後のメッセージを保存します

MQTT vs HTTPの比較

機能 MQTT HTTP
ヘッダーサイズ 2バイト 100-500バイト
パターン Pub-Sub (発行/購読) Request-Response (要求/応答)
接続 持続的 リクエストごと
帯域幅 非常に低い 高い
バッテリーへの影響 最小限 大きい
ブラウザサポート WebSocket経由 ネイティブ

帯域幅の例

1日あたり1000件の位置情報更新:

MQTTは8倍少ない帯域幅を使用します。

MQTTが有利な場合

1. バッテリーが制限されたIoTデバイス

ペット追跡用首輪:

理由:持続的な接続、軽量ヘッダー、無線通信時間の短縮。

2. 不安定なネットワーク

カバレッジが不安定なセルラーIoTデバイス:

3. 多対多の通信

スマートペット給餌器のシナリオ:

Feeder 1 → pets/019b4132/feeding
Feeder 2 → pets/019b4127/feeding
App 1 → subscribes to pets/+/feeding (all pets)
App 2 → subscribes to pets/019b4132/feeding (one pet)

4. リアルタイムセンサーデータ

毎秒更新を送信するペット用ヘルスモニター:

HTTPが有利な場合

1. 標準的なウェブ/モバイルアプリ

HTTPは普遍的です:

2. 要求/応答パターン

ペットの詳細の取得:

GET /pets/019b4132
200 OK
{"name":"Fluffy","species":"CAT"}

HTTPは要求/応答においてよりシンプルです。

3. キャッシュ要件

HTTPキャッシングはすぐに使えます:

MQTTにはキャッシングがありません。

4. RESTful API

HTTPステータスコード、メソッド、およびセマンティクス:

Modern PetstoreAPIでのMQTTの使用方法

Modern PetstoreAPI はIoTデバイス向けにMQTTを実装しています。

ペット追跡用首輪

首輪が位置情報を公開:

Topic: pets/019b4132/location
QoS: 1 (at least once)
Payload: {
  "lat": 37.7749,
  "lng": -122.4194,
  "battery": 85,
  "timestamp": "2026-03-13T10:30:00Z"
}

モバイルアプリが購読:

const mqtt = require('mqtt');
const client = mqtt.connect('mqtts://mqtt.petstoreapi.com');

client.subscribe('pets/019b4132/location');

client.on('message', (topic, message) => {
  const location = JSON.parse(message);
  updateMap(location.lat, location.lng);
});

スマート給餌器

給餌器がスケジュールを購読:

Topic: pets/019b4132/feeding-schedule
Retained: true
Payload: {
  "times": ["08:00", "18:00"],
  "amount": 100
}

給餌器が給餌イベントを公開:

Topic: pets/019b4132/feeding-events
Payload: {
  "timestamp": "2026-03-13T08:00:15Z",
  "amount": 100,
  "dispensed": true
}

ヘルスモニター

モニターがバイタルデータを公開:

Topic: pets/019b4132/health
QoS: 0 (fire and forget, high frequency)
Payload: {
  "heartRate": 120,
  "temperature": 38.5,
  "activity": "resting"
}

ApidogでのMQTTテスト

Apidog は、HTTPおよび他のプロトコルと並行してMQTTテストをサポートしています。

MQTT Pub-Subのテスト

  1. MQTTブローカーに接続
  2. トピックを購読
  3. テストメッセージを公開
  4. メッセージ形式を検証
  5. QoSレベルをテスト

ネットワーク障害のシミュレーション

HTTPとの比較

両方のプロトコルで同じ機能をテストします:

結論

MQTTとHTTPは異なる目的を果たします。リソースが限られたIoTデバイスにはMQTTを、標準的なウェブ/モバイルAPIにはHTTPを使用してください。

Modern PetstoreAPI は、ユーザー向けAPIにはHTTP、IoTデバイスにはMQTTという両方の使用方法を示しています。どちらが「優れている」かではなく、適切なプロトコルはあなたの制約に依存します。

あなたのユースケースに最適なものを見つけるために、Apidog で両方のプロトコルをテストしてください。

ボタン

よくある質問

MQTTはHTTP上で動作できますか?

MQTTはWebSocket上で動作でき、WebSocketはHTTP上で動作します。これはファイアウォールの通過に役立ちますが、MQTTの効率性の一部は失われます。

MQTT QoSレベルとは何ですか?

MQTTは安全ですか?

はい、MQTTはTLS暗号化(MQTTS)とユーザー名/パスワード認証をサポートしています。Modern PetstoreAPIは、すべてのIoTデバイスにMQTTSを使用しています。

ブラウザはMQTTを使用できますか?

ブラウザはWebSocket経由でMQTTを使用できます。MQTT.jsのようなライブラリはブラウザ環境をサポートしています。

MQTTとWebSocketの比較

MQTTはWebSocket上で動作できるプロトコルです。WebSocketはトランスポート層です。MQTTはWebSocketの上にpub-sub、QoS、およびIoT特有の機能を追加します。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる

APIにHTTPの代わりにMQTTを使用すべき時とは?