Faraday middlewareのjsonとretryの順番
Faraday gemでmiddlewareを並べるとき、json middlewareはretry middlewareより上に置いておくと便利。 Faraday middlewareは、requestでは上から順番に、responseでは下から順番に処理されることになっています。
実装としてはmiddlewareのcallがネストしている形
ここでretry middlewareではwith_retriesで子のcall全体を囲う形で実装されています。
したがってretryより下にjsonがいると、リトライするかどうかの判断より先にbodyのデコードが始まります。
つまり、何かしらのエラー時にresponse bodyがJSONでエンコードされていなかった場合、リトライされるより先にJSONデコードのエラーが出ます。JSONデコードのエラーでリトライするような設定になっていなかった場合、このままリトライされずにエラーがraiseされる流れとなります。
このためretryより上にjsonを置いておくと、先にリトライするかどうかの判断をして、その後デコードを考えるという流れになります。
そうするとretry middlewareはrequest middlewareというよりかはresponse middlewareと思った方が分かりやすいのかもしれませんね。