BoltzEngine の入力 API の種類はどのようなものがあり、どのような違いがありますか

BoltzEngine は、送信情報入力 API として、net/rpc、HTTP API Gateway(http-proxy)、CSV入力コマンド を持ちます。

今後の開発は gRPC を中心に進むため、新規の開発では gRPC の利用を推奨します。

gRPC

バージョン 2.0 から利用可能な API です。net/rpc と異なり、Ruby や C# など、多くの言語からリクエストを送ることができます。また、この API は APNs と FCM のトークンをまとめて一つのリクエストで送るようになっています。

 1msg := rpc.Message{
 2    // APNsトークンが.Tokensに存在しない場合は不要
 3    ApnsHeader: &apns.Header{
 4        Address:      "gateway.push.apple.com:2195",
 5        KeyPEMBlock:  key,
 6        CertPEMBlock: cert,
 7    },
 8    // FCM登録IDが.Tokensに存在しない場合は不要
 9    GcmHeader: &gcm.Header{
10        RequestURL: "https://fcm.googleapis.com/fcm/send",
11        ServerKey:  serverKey, // FCMサーバキー
12    },
13    // WebPushトークンが.Tokensに存在しない場合は不要
14    WebpushHeader: &webpush.Header{
15        Subject: "mailto:boltz@example.com",
16        PrivateKey: privateKey, // VAPID PrivateKey
17        PublicKey: publicKey, // VAPID PublicKey
18    },
19    Tokens: []string{
20        "1(16進APNsトークン)",
21        "2(FCM登録ID)",
22        `4{"v":1,"endpoint":"(WebPushエンドポイント)","p256dh":"(ブラウザ公開鍵)","auth":"(WebPush乱数)"}`,
23    },
24    Priority: rpc.Priority_HIGH,
25    // APNsトークンが.Tokensに存在しない場合は不要
26    Payload:  `{"aps":{"alert":"hello","badge":1}}`,
27    // FCM登録IDが.Tokensに存在しない場合は不要
28    Parameters: &gcm.Parameters{
29        Data: map[string]string{
30            "alert": "hello",
31        },
32    },
33    // WebPushトークンが.Tokensに存在しない場合は不要
34    Body: "hello",
35    // 1秒で送る見込み通知数; 0なら無制限
36    BandWidth: 0,
37}
38stream, err := c.Send(context.Background(), &msg)
39if err != nil {
40    log.Fatalln("Send:", err)
41}

net/rpc

BoltzEngine 標準の通信 API です。Go 言語標準パッケージである net/rpc パッケージ の機能を使用して通信します。 BoltzEngine 本来のパフォーマンスを引き出すことができますが、通知メッセージをキューイングする処理も Go 言語で実装する必要があります。 Go 言語を使用して BoltzEngine に APNs の通知をキューイングするには以下のようなコードを記述します。

 1req := &apns.Request{
 2    Addr:       "gateway.push.apple.com:2195",
 3    Credential: config.Credential(),
 4    Messages:   []*Message{},、
 5}
 6for i, token := range tokens {
 7    msg := &apns.Message{
 8        ID:      uint32(i),
 9        Token:   token,
10        Payload: []byte(`{"aps":{"alert":"hello"}}`),
11    }
12    req.Messages = append(req.Messages, msg)
13}
14c, err := rpc.Dial("tcp", "boltz-server:13010")
15if err != nil {
16    log.Fatal("Dial:", err)
17}
18defer c.Close()
19
20var resp apns.Response
21err = c.Call("BoltzEngine.BroadcastMessagesToAPNs", req, &resp)
22if err != nil {
23    log.Fatal("Call:", err)
24}

HTTP API Gateway (http-proxy)

BoltzEngine の RPC API を REST の API として使用できるように動作するプロキシサービスです。 一般的な HTTP REST API として扱えるようになりますが、RPC 系 API よりも処理速度は低下します。また、追加でサービスを起動する必要があります。

CSV 入力コマンド

CSV に送信する通知を指定して一括で送信することができます。コマンドラインツールとして起動して CSV の内容を BoltzEngine 通知を登録します。バッチ処理等への組み込みに使用可能です。 速度は BoltzEngine の RPC インターフェイス (net/rpc) に依存します。

ご不明な点はありませんか?

機能の詳細、導入のご検討、お見積もり依頼などは、お気軽にお問い合わせください。
担当者から追ってご連絡いたします。

お問い合わせはこちら

記事へ戻る