えいのうにっき

a-knowの日記です

Pixela アップデート情報・Incoming Webhook 的なものが作れるようになりました!

Pixelaを公開してから一週間。短いような長いような、僕にとってこの一週間はこれまでに味わったことのない感覚を味わうことのできた一週間でした。

blog.a-know.me

今日に限らずこの一週間、ちょこちょことアップデートを実施してきてはいたのですが、今日実施したやつは比較的大きめのアップデートになったのでこちらでも紹介したいと思います。Pixela で、Incoming Webhook 的なものを作れるようにしました。ちょっと大げさかな......という気持ちもあるにはあるんですが、主に、任意のリクエストヘッダを指定できないクライアントのためのアップデートです。

Incoming Webhook 的なものを作れるようにした

手順的には、以下のような感じです。前提として、a-know というユーザー、test-graph というグラフはすでに登録済み、とします。

まずは、以下のようなリクエストを発行して Webhook を作ります。

$ curl -X POST https://pixe.la/v1/users/a-know/webhooks -H 'X-USER-TOKEN:thisissecret' -d '{"graphID":"test-graph","type":"increment"}'
{"hashString":"78cea9809ff6aa2fe2b8d26cbdd883b8672c8f3a64b8d273ebd98928d3b01f01","message":"Success.","isSuccess":true}

これだけで、graphID で指定したグラフの、その日の数値をインクリメントすることのできる Incoming Webhook 的なものを作成できました。

Incoming Webhook 的なものなので、利用する際には特に認証情報のセットは必要ありません。裏を返せば、hashString は他の人にはバレないようにするとよいですね。

$ curl -X POST https://pixe.la/v1/users/a-know/webhooks/78cea9809ff6aa2fe2b8d26cbdd883b8672c8f3a64b8d273ebd98928d3b01f01 -H 'Content-Length:0'
{"message":"Success.","isSuccess":true}

上の例ではリクエストボディに何も指定していませんが、別に何か指定してもよいです。すべて無視されます。

その他にも、作成済みの Webhook 一覧の取得や削除もおこなえるようにしています。詳しくはAPIリファレンスを確認してください。

そしてなんと、id:sue445 さん開発の gem(GitHub - sue445/pixela: Pixela API client for Ruby)も、既にこれに対応していただいています。早い、早すぎる......!(ありがとうございます!)

利用場面は?

冒頭でも書きましたが、任意のリクエストヘッダを指定することができないクライアントなどで使ってもらうことを想定しています。IFTTT とかが、それに該当するようです。ちょっと意外。あ、もちろん普段使い(?)してもらってもいいです。

あと、これもすでに触れましたが、指定されているリクエストボディの内容に関わらず increment / decrement することができるので、例えば、Mackerel のようなサーバー監視サービスでアラートが発生した際に、その Webhook リクエスト先として Pixela Incoming Webhook の URL を指定しておけば、アラートが発報されるたびに草を生やすことができます。......と、いうことを、すでにこの Webhook なしで実現してくださっている方がいます。あと一歩のところで間に合わなかった......(すみません)!

blog.tukae.lu

その他の用途にも、便利に使ってみてもらえると嬉しいです。

その他、この一週間でやったこと

思いの外、面白がってくださる方が多かったので、こちらも楽しくなっていろいろと取り組んでしまいました。

このうち、最後の GitHub から Pixela グラフを参照したときにキャッシュされる画像を、自動的に破棄できるように については、ここでも少し書いておこうかと思います。

GitHub から Pixela グラフを参照したときにキャッシュされる画像を、自動的に破棄できるように について

GitHub は、GitHub の README や issue、Pull Request などから参照される画像のすべてをキャッシュしてしまう仕様だということに、Pixela を公開してから気が付きました。そしてこのキャッシュは、GitHub 独自の HTTP メソッドである PURGE リクエストを送ることで破棄させることができます。以下のような Qiita 記事も書かれています。

qiita.com

Pixela と GitHub の README はとても相性がよいと考えていたため、これをなんとか回避、もしくは対処したく、以下のような対応をおこないました。

  • 最初は、Pixela からのレスポンスヘッダでキャッシュ関連のヘッダを指定することで対処できるかと思われたが、Pixela が利用しているプラットフォームである Google App Engine 特有の仕組み(GAEとクライアントとの間にエッジキャッシュが挟まる)により、この方法だけでは対処できないことが判明。
  • グラフ定義に、パージ対象としたい GitHub キャッシュ URL を最大5つまで指定できるようにした
  • 対象のグラフに更新が入った際、指定されているキャッシュURLに対してそれぞれに PURGE リクエストを送るようにした

こう書くとなんでもないように見えるんですが、GitHub 独自の HTTP メソッドである PURGE リクエスト も GAE の制約により素直に送ることができなくて、まぁまぁ結構たいへんでした......!

本当にありがとうございます

多くの方にたくさんのライブラリ活用事例をアップしていただいてもいます。自分が作ったものをきっかけとしてこうした動きが起こったことは今までになくて、本当に感動していますし励みになっています。

今後もより多くの人に使ってみてもらって、それにより Pixela をもっと良いものにしていけたらと思っているので、これからもどうぞよろしくおねがいします!

pixe.la