railsでkeyの無いPOSTデータを受け取る

2017-09-11

https://sendgrid.kke.co.jp/docs/API_Reference/Webhooks/event.html

ここで「こんなデータを送ります」ってところに書いてあった例がこんな感じだった。

# イベントPOSTの例
[
  {
    "sg_message_id":"sendgrid_internal_message_id",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337197600,
    "smtp-id": "<4FB4041F.6080505@sendgrid.com>",
    "event": "processed"
  },
  {
    "sg_message_id":"sendgrid_internal_message_id",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337966815,
    "category": "newuser",
    "event": "click",
    "url": "https://sendgrid.com"
  },
  {
    "sg_message_id":"sendgrid_internal_message_id",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337969592,
    "smtp-id": "<20120525181309.C1A9B40405B3@Example-Mac.local>",
    "event": "group_unsubscribe",
    "asm_group_id": 42
  }
]

一番下に「こんな感じでcurlからPOSTのテストできるよ」って書いてあった。

$ curl -X POST -H "Content-Type: application/json" -d '[{"email":"john.doe@sendgrid.com","timestamp":1337197600,"smtp-id":"<4FB4041F.6080505@sendgrid.com>","event":"processed"},{"email":"john.doe@sendgrid.com","timestamp":1337966815,"category":"newuser","event":"click","url":"https://sendgrid.com"},{"email":"john.doe@sendgrid.com","timestamp":1337969592,"smtp-id":"<20120525181309.C1A9B40405B3@Example-Mac.local>","event":"processed"}]'

なるほど。

rails力が低くてどうやってkeyの無いデータを受け取ればよいのかわからなかったので、色々試して結局下記で受け取ることに。

params = request.body.read
events = JSON.parse(params)