【HTTPメソッド】特定のAPI通信ができないというお問い合わせの対応
今回は特定のAPI通信ができない(操作が完了しない)というお問い合わせをいただいたときのことを紹介します。問題の原因が特定のHTTPメソッドのPATCH
、PUT
、DELETE
のいずれかがプロキシサーバーなどでブロックされていることが原因だと定義し、コードの改修ではなく、カスタマーサポートの対応マニュアルを整備したことについて記載しています。
発生していたこと
Webで展開している店舗向けのサービスにて、「作成はできるけど編集ができない」 や、「作成したものが削除ができない」 といった 「一部の操作ができない」 というご連絡がカスタマーサポートを通じてエンジニアへの対応依頼としてあがってきました。なるべくご連絡いただいた状態を再現しましたが、手元のDevやステージング環境ではお問い合わせいただいた問題は発生せず、Datadog、Sentryを探るも手掛かりを掴めない状態でした。再現や原因が特定できないので数日間解決策をご案内できないままでした。
問題の切り分け
依頼があった当初は、ちょうどSPA移行が完了した頃でしたので、プログラムに何かしらの問題があるのかと思いました。しかし、同系列の別店舗のユーザーからも同様のお問い合わせが入ったとき、店舗の規模も考慮すると、プロキシサーバーを経由されて通信されている可能性が高いと判断し、スマートフォンの移動回線で同じ操作が可能かを試していただき、それであれば問題なく操作できることが確認できました。
考察してみたこと
実際のご利用のネットワーク環境などを見ることができないため、エンジニアで原因を仮定しながら進めていくことになりました。前職、情報システム部の方と一緒にお仕事させていただいた経験を思い出し、その時されていたのがセキュリティ対策の一環としてWebサイトの閲覧をホワイトリスト・ブラックリストで制御していたことを思い出しました。HTTPメソッドも単純リクエストのGET
やPOST
以外のPATCH
、PUT
、DELETE
を塞ぐことで、セキュリティ向上、対応範囲を狭めているのかと考えました。
もちろんHTTPメソッドだけでなく、前途したURIについてもパスがブラックリストになっていて通信できない場合も原因としてあるのかなとは思います。
余談ですが、HTMLの<form>タグにmethod属性がありますが、GET
とPOST
しか渡せません。もしPATCH
、PUT
、DELETE
を渡したい場合は、<input type=hidden name="_method">
にvalueでメソッド名を持たせなければならないので、そういった背景や、プリフライトリクエストの場合はブロック、またはREST API設計を考慮したプロキシサーバーの設定にされていないのかと思いました。
<form method="POST" action="/backend.php">
<input type="hidden" name="_method" value="patch">
<input type="text" name="text">
<input type="radio" name="radio" value="true">
<input type="submit" value="更新">
</form>
検討、対応したこと
今回お問い合わせいただいた問題は、ご利用環境に依存するため、既存のサービスを改修するようなエンジニアで対応できることがありません。
(HTTPメソッドを全てPOST
にするという方針になればありますが、、、)
ただ、同様のお問い合わせがあった場合、問題の切り分けから解決策のご案内までをカスタマーサポートを経由すると、数日間かかってしまう場合もあるため考慮したいところでした。
解決までの時間短縮も考慮し、お問い合わせを受けたカスタマーサポートの担当者のみで対応できそうなことをフロントエンドとカスタマーサポートの担当者でいくつか考えてみました。
- Devtoolを開いてもらい、HTTPメソッドを確認してもらう
- 必要なHTTPメソッドが有効であるかのチェッカーサイトを作る
上記については、カスタマーサポートの対応範囲の拡大や展開コスト、チェッカーサイトの利用頻度や運用コスト面でボツにしました。
わかりやすいのは、既にご案内したことを応対マニュアルにすることで落ち着きました。
改めてトラブルシューティングすることを順にまとめると、
- スマートフォンの移動回線で同じ操作ができるかをお試しいただけるかご案内
- もし操作できた場合、特定の通信ができないネットワーク環境であることをご案内
- ネットワーク環境については、御社のIT担当の方へその旨をご連絡いただくようご案内
- もし解決できなければ、別の原因が考えられるのでエンジニアに依頼をする
以上のポイントについて、お問い合わせマニュアルを整備することで、カスタマーサポートで問題を切り分けできるようになり、解決までの時間の短縮ができると考えています。
現在も稀に同内容であっても応対マニュアルを見落としてエンジニアに依頼をいただくこともありますが、この応対マニュアルを周知することでクローズできています。
最後に
ご利用環境については、弊社ヘルプページにも記載させていただいておりますが、なかなか難しいところかと思っております。引き続きカスタマーサポートと協力して対応できるものは積極的にやっていきたいと思っています。
またタイミーではエンジニアを積極的募集中です。
もしご興味を持っていただけましたら、是非一度下記リンクをご確認いただけますと幸いです。
Discussion