0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[審美眼を鍛えようシリーズ] バリデーションを考える・バックエンドはやっぱり最後の砦

0
Posted at
Page 1 of 10

バリデーションとは

  • 妥当性検査のこと
  • 単項目
    • 必須/桁数/妥当な選択肢
  • 複数項目間の整合性
    • 期間:開始日と終了日
  • 他のデータとの整合性
    • マスタに存在するコードかどうか
  • 業務ルールとの整合性
    • この項目がAならこちらの項目はCしか選択できない、など

原則

  • バックエンドは必須
  • フロントエンドはおまけ

ユーザビリティ的には

  • 早い段階でエラーを通知してくれるのが嬉しい
  • フロントでも結局バリデーションは必要

設計上のジレンマ

  • 同じバリデーションを2カ所で実施しなければならない
  • PG言語が異なる場合、本当に2重になる

アイデア

  • 単項目の制約/データ感の整合性はDBに頼れる
    • 不正なデータがDBに格納されないようにする、まさに最後の砦
    • せめて500エラーが起きるようにする
    • 複数項目間の妥当性/業務ルールには無力
  • 複数項目間の妥当性/業務ルールは、最低限、バックエンドでチェックする
    • フロントでは「送信」を押した後に表示されるエラーとして表現する

バリデーションエラーをいつ通知するか

  • 早い方がいいのは確か
  • バックエンドでしかチェックできない事項も、フォーカス外れたときいAPI呼んでチェックする、という実装は可能
  • しかし、厳密な実装はとても手間がかかる
    • 特に企業向けアプリは項目数が多いので、現実的でない
  • 入力中に表示できるエラーと、「送信」を押してから表示されるエラーに分けて考える
  • UIを設計するときも、それを念頭に置く

バックエンドのエラーの通知の考慮点

  • なるべく多くのエラーを通知してあげた方がいい
  • エラー箇所は明示した方がよい

実装について

  • PG言語をフロントとバックエンドで統一するのは1つの案

最後に

  • バリデーションを決して舐めないように
  • 表示タイミングとUIを基本設計時から考えておく
  • チェックの種類とチェック箇所を考える(DB/ロジック/フロント/バックエンド)

良い方法あればぜひ教えて下さい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?