私たちのデザインでは、パラドックスの何かがあります。私たちはプロジェクトのデータベースを持っています。各プロジェクトにはステータスがあります。プロジェクトを「準備完了」状態から「クリーンアップ」状態に変更するためのREST APIがあります。 2つのことが起こらなければならない。RESTfulなAPIが部分的にしか成功しない場合の対処
- 更新データベース
- でステータスが承認者に電子メールを送信
現在、RESTfulなAPIが1を行い、それが成功した場合、2
しかし、時には行います電子メールは送信に失敗します。しかし(1)は既にコミットされているため、ロールバックすることはできません。
電子メールを送信する前にコミットが成功したことを確認したいので、私はコミットする前に電子メールを送信したくありません。
私はについて考えて、手順1を元に戻しましたが、それは非常に難しいです。ステータスの変更には、履歴テーブルに新しいレコードが追加されるため、削除する必要があります。そして、他の人が同時に他の変更を加えた場合、元に戻すことが邪魔になるかもしれません。
どうすればいいですか? (2)が失敗した場合、クライアントに「200 OK」を返す必要がありますか?
最高のオプションのように、「500 Server Error」と「プロジェクトステータスが変更されました。」というエラーメッセージが返されます。ただし、承認者に電子メールを送信できませんでした。適切な処置をとってください。」
私は1回の操作で1 + 2を行うべきではないでしょうか?しかしそれはクライアントに負担をかけるだけです。これは悪いことです!
ありがとうございます!それは非常に役に立ちます。はい、バックグラウンドタスクを使用して電子メールを管理できると思います。 –