3秒程度かかるAPIコールについて
下記の仕様のAPIの設計をどうしたらいいかアドバイスをいただきたいです。
APIの仕様
- http://example.com/hoge?url=http://yahoo.com をGETで叩くと、
urlパラメーターで指定したページのスクリーンショット画像を閲覧できるurlをjsonで返却する(スクリーンショットした画像をAWSのS3などにアップロードし、そのURLを返す) - このAPIでは、このURLをスクリーンショットとってね、ということ以外に処理をする(そっちはレコード一個作るくらいなので重くない処理)
- クライアントから数秒間は画像が見れなくても大丈夫
- なるべく短いレスポンスタイムにしたい
APIの叩き方
- iOSやAndroidなどのクライアントから非同期通信でAPIを叩く
- APIの戻り値は現状でハンドリングしてなく、遅くなってもUXは悪化しない
- 画像を遅延読み込みみたいな感じで表示させるので、そこのUXは悪化しますが
懸念
- スクリーンショットを取得するのに、サーバー側でPhantomJSなどを使うとレスポンスタイムが3秒はかかってしまう
- レスポンスタイムが長いため、普通にAPIとして作るとサーバー側の負荷が心配
こんな設計?
- APIを叩いた時に、スクリーンショット取得するURLをキューにため、そのAPIはさっさとレスポンスを返す。キューにたまったURLをデーモンで処理し次々とスクリーンショットを取得。iOSやAndroidからは定期的に「スクリーンショット取れましたかAPI」を叩いて、さっき自分が送ったURLのスクリーンショットが取得できているかどうか確認する
- 1ではクライアントから、スクリーンショットとれたー?というAPIを叩いていたが、それをせずに、デーモンでスクリーンショット取得後にPush通知でiOSやAndroidに知らせる
- 普通に最初のリクエストでスクリーンショットとるところまでやって、レスポンス返す(レスポンスタイム長くなりますが)
- socket通信
- 他に何かよい案があればお願いします。
補足
Rails4.2.6をAWSのEC2上で動かしてます。