###前提・実現したいこと
昨今UX向上の為リアルタイムで入力チェックをフロント側で行い、POSTされたデータはサーバーで入力チェックする二重チェックをするのが一般的だとおもわれます。、
このチェックのルールの同期(フロントとバックでのチェックルールの統一)の際、有用な方法はなにかありますでしょうか。
質問が漠然としているのでお答えするのが難しいと思いますがよろしくお願いします。
また、業界では一般的にどのようなほうほうを取っているのか知りたいです。
###試したこと
validatorAPIを用意して、フロント側ではAjaxで叩く、サーバ側ではもちろんそのまま使う → 同じVaridatorを使うことになるが、結局サーバに接続してるのでUX向上につながらない?
頑張って同じルールになるように両方で同じ処理を書く → 同じ処理を書くのが大変だし、なにより修正のとき大変。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
ベストアンサー
サーバサイドとクライアントサイド
昔はサーバサイドでバリデーションを行う方法しか存在しませんでした。
クライアントサイドでのバリデーションが注目されたのは、「クライアントサイドによるバリデーション」がサーバに送信されるまでバリデーション出来ないという「サーバサイドによるバリデーション」の欠点を克服できるものだったからです。
しかし、「クライアントサイドによるバリデーション」はHTML/JavaScriptを書き換えればバリデーションなしで送信出来てしまう不完全性の問題があります。
現在はサーバサイドで完全なバリデーションを行い、クライアントサイドでも同様のバリデーションを行うことで、ユーザのバリデーションにかけるまでのタイムラグを出来るだけ小さくしているのが実情です。
クライアントサイドによるバリデーションはサーバサイドのそれと同じである方が勿論好ましいですが、必ずしも完全に一致する必要はありません。
その代わり、サーバサイドによるバリデーションが完全性を保証する必要はあります。
サーバ/クライアントサイドのバリデーションを同期する
このチェックのルールの同期(フロントとバックでのチェックルールの統一)の際、有用な方法はなにかありますでしょうか。
「全く同じバリデーションになるように双方のアルゴリズムを組む」以外に方法はないと思います。
クライアントサイドからサーバサイドに逐一リクエストしてサーバサイドで判定することで完全に一致させつつ、クライアントサイドのコーディング量を少なくすることが可能ですが、それでは「クライアントサイドのメリット(HTTPリクエストするタイムラグがない)」を相殺します。
(2017/11/24 22:49追記)
サーバにnode.jsを採用すれば、JavaScriptコードを部分的に流用出来るかも知れません。
Re: LokiTick さん
投稿2017/11/24 13:44
編集2017/11/24 13:49総合スコア18182
0
フロントエンドのUIで入力チェックは所詮pattern属性くらいが限界ですよね
バリデート処理も必ずしも同じ結果を期待しないと思うのであくまでも別物として
設定すればよいのでは?
UIのチェックはユーザーの負担になるくらいならなくてもいいくらいだと思います。
投稿2017/11/24 08:57
総合スコア115684
0
頑張って同じルールになるように両方で同じ処理を書く
→ 同じ処理を書くのが大変だし、なにより修正のとき大変。
同じAPIをクラサバ両方で呼べば一番簡単ですが、サーバ接続したくない場合、
トランスパイラ(JavaならHaxe)で変換する方法があるかも、と言ってみるテスト。
もちろん、入力チェックのためだけだと、学習コストが高く付くでしょうが、
他の何かでも使って、ついでにやるなら、試す価値くらいはあるかもしれません。
投稿2017/11/24 13:45
総合スコア5592
0
クライアントサイドのバリデーションは、「required
やmaxlength
のように、属性1つでかけられる程度に限ってしまう」というのも1案ではあります。
あと、サーバサイドもNode.jsの場合、「同じコードをクライアントに送って、バリデーションを共用する」というアプローチも見たことがあります。
投稿2017/11/24 09:05
総合スコア145577
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/25 02:46
2017/11/25 03:27
2017/11/27 00:26
0
案だけ。
ClientValidator - チェック処理実装はJavascript
ServersideValidator - ClientValidatorをjavax.scriptパッケージ等を使用して呼び出す。
という形にすると、チェック実装はjavascirptだけで済む。
メンテナンス性だけを考えればこういう案もある、という程度で。
投稿2017/11/24 08:58
総合スコア5572
0
自分はクライアントサイドとサーバーサイドの入力検証の一元化については
HTML5の属性値による入力検証に落とし込めるものについてはその形で
できないものについてはAjaxでというような感じにしてます
そのためにまず設定と処理を分けています
設定された入力検証がpattern,require,max,minならHTML出力時に属性値として出力し
callbackであればajaxで検証するようにする、というような感じです
(もちろんHTMLの属性値として出力した入力検証についても
受信時に同じ設定を利用して改めてサーバーサイドでも検証します)
入力検証の中には商品とオプションの組み合わせで入力値の制限が変わるというような
およそクライアントサイドに全ての情報を落とし込むのは現実的でない、望ましくないが
ユーザーにはリアルタイムに入力値制限をしてあげたいものがあるので
Ajaxによる入力検証の仕組みは軸として持っておくべきと思ってます
投稿2017/11/28 02:11
総合スコア7819
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/25 02:51