現状、エラー時、APIや状況ごとに微妙に異なるレスポンスが帰ってくるようです。
例えば、auth/session/generateにappSecretを指定せずにPOSTすると以下のようなレスポンスが帰ってきます。
{"error":{"code":"INVALID_PARAM","param":"appSecret","reason":"must-be-not-undefined"}}
が、同APIに無効なappSecretを指定してPOSTすると以下のようになります。
{"error":"app not found"}
エラー処理は統一したいですし、共通フォーマットを持つべきだと考えます。皆さんはどう考えますか?
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
{ ok: false, error: "INVALID_PARAM" }
でちょうどよいと私は考える。
ただ、煩雑であるとはいえエラーレスポンスの変更は破壊的であると思うので、慎重な議論が必要だろう。
後者を
{ "error": { code: "APP_NOT_FOUND", message: "app not found" }}
のような形式にしたいと思います。
エラーレスポンスのスキーム、全てを網羅できるように統一して明確にしたら良いですね
コードレベルではエラーのオブジェクト生成する関数用意したら確実かな
そもそもエラーメッセージがnot found形式やnot-found形式、NOT_FOUND形式などバラバラなためそこをどうにかしてほしい気持ちはあります。また誤字が修正されるなどの破壊的変更の履歴もありますので可能であればエラーコードを制定してほしいです。
現在作業中で、エラーメッセージ、エラーコードのほかにエラーごとのUUIDも付与するようにしています
これなら誤字などの心配はありません
こんな感じ
export const meta = {
requireCredential: true,
requireModerator: true,
params: {
fileId: {
validator: $.type(ID),
transform: transform,
},
},
errors: {
fileNotFound: {
message: 'File not found.',
code: 'FILE_NOT_FOUND',
id: 'caf3ca38-c6e5-472e-a30c-b05377dcc240'
}
}
};
export default define(meta, async (ps, me) => {
const file = await DriveFile.findOne({
_id: ps.fileId
});
if (file == null) {
throw new ApiError(meta.errors.fileNotFound);
}
return file;
});
参考までにエラーの原因がクライアントに由来するものなのかサーバー側の問題なのかのフラグも付けるようにした
Most helpful comment
後者を
{ "error": { code: "APP_NOT_FOUND", message: "app not found" }}
のような形式にしたいと思います。