
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) に依存します。