sendgrid4rを作ってみた

SendGridのWeb API v3が公開されたのでsendgrid4rというgemを作ってみました。

sendgrid4rはとりあえずSendGridのWeb API v3”だけ”をサポートしたライブラリです。今後v2をサポートするかどうかはわかりません。
v3はちょっと前に公開されたTemplate Engine APIを含むRESTfulな新しいAPI群です。
v3が出たからといってv2がすぐにdeprecateになるわけではないようです。
というのも、今のところv3は、v2と被る機能(v2を置き換える機能)を提供していません。
現時点で、以下の機能がありますが、今後もどんどん機能が追加されていく雰囲気を感じます。実はここに載っている機能の他にも、一瞬公開されてすぐに非公開にされた機能があります。公式ドキュメントの更新履歴をよく見るとわかると思います。

  • Advanced Suppression Manager(ASM)
  • IP Management
  • Enforced TLS(Settings)
  • Template Engine

ASMは高度なUnsubscribeリスト機能で(特にマーケティングメール系の)色んな種類のメールの配信停止を個別に制御したい場合に使う機能
IP Managementは送信するメールの種類毎に複数のIPアドレスを駆使して、メールの到達率を可能な限り高めたい場合に使う機能
Enforced TLSは平文でメールが配送される経路を排除する場合に使う機能
Template Engineは複数のテンプレートの管理をデザイナ側に移譲する場合に使う機能
って感じでしょうか。

そういえば一応、今回のsendgrid4rの設計思想的なものをメモしておきます。忘れっぽいので。

今回目指したのは、以下の3点です。
  1. 機能追加を簡単に行えるようにしたかった
  2. APIのI/Fは全てSendGrid4r::Clientのインスタンスメソッドとして提供したかった
  3. ClientインスタンスごとにSendGridの認証情報を分離したかった

v3は頻繁に機能追加されることが予想されるため、機能追加を簡単にするため、各サブ機能はmoduleとして実装して、これをClientクラスにincludeすることにしました。
そうなった場合、各moduleにどうやって認証情報を渡すのかというと、Clientクラスのインスタンスのプロパティに認証情報をもたせるとmoduleから普通にアクセスできました。
moduleってjavaでいうところのpublic static class的なものかと思っていたので、includeしたインスタンスのプロパティにアクセスできるというのが意外でした。
ついでにmoduleには名前空間的な意味もあるみたいで、なんかこう、今までのjava的な頭からすると単純に置き換えることができないものなんだな、と感じました。

ただ、この作りが最適かどうかはわかりません。Ruby初心者なので。Rubyのデザインパターンをいろいろ調べてみましたが、グッと来るパターンが見つからず結果このような実装となりました。
もっといい方法があるよ的なまさかりがあれば是非ぶん投げて欲しい初秋の時分、何卒よろしくお願い申し上げる次第でございます。


コメント

このブログの人気の投稿

Execノードを使う

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)

Joinノードを使う(その4)