web-dev-qa-db-ja.com

同期されたフォームデータ検証のベストプラクティス(Webアプリ-クライアントサーバー)

ここでは、インターネットで何度も尋ねられたトピックについてもう一度説明しますが、十分な答えは見つかりませんでした。

クライアント側とサーバー側の検証を同期させるためのベストプラクティスは何ですか?

私は作成中のWebアプリではそれを実行していませんでした(検証が重複していた)、React NativeとREST APIをバックエンドとして使用して開始したときすべての検証を2回行い、何か変更があった場合は2回編集する神経があるかどうかを自問しました。

私の心に何が入っているのか:

  1. 検証をまったく共有しない(2つの検証ルール、2つの検証関数、2つの正規表現を設定する...)
  2. サーバー側の検証のみを行います(2000年代は大丈夫ですか?)
  3. クライアント側の検証のみを行う(私は冗談です!)
  4. 開始時にクライアントアプリがサーバーからいくつかのルール/セットをダウンロードして使用できるようにする

私は本当に4番目のオプションを考えていましたが、多すぎるかもしれません(正規表現、関数などはインターネットを介して簡単に移動できません-JSONなど)が、オンエアの更新などにも適しています.

本当に分からない。

アイデア、ヒント、ベストプラクティスはありますか?

2
Baterka

はい!!!これは少し面倒かもしれません。私も完璧な解決策を見つけることができません。

すべての可能なオプションをリストしたので、それらについて私の意見を述べましょう

オプション3:「クライアント側の検証のみを行う(私は冗談です!)」冗談だけでよかった:)

オプション4:「クライアントアプリを最初にサーバーからいくつかのルール/セットをダウンロードして使用できるようにする」正しく言ったように、これにより複雑さが増します。 「lessThan」、「lessThanOrEqualTo」、「greaterThan」、「inBetween」、「regex」など、さまざまな種類の検証を行うことができます。クライアントがこのすべての検証ルールをサーバーからダウンロードして検証する必要がある場合、検証ルールのスキーマが必要です。これは私には複雑に聞こえます。検証フレームワークを構築していないので、これを実行したくありません。複雑さを軽減するために、少し重複したコードで大丈夫です。

オプション2:「サーバー側の検証のみを行う」重複したコード(2か所と2つの言語での検証ではない)がないため、これは良いアイデアだと思います。これによるコストは、追加のHttp呼び出しが少ないことです。これはほとんどのビジネスシナリオで問題ないと思います。このオプションのユーザーエクスペリエンスが悪い場合は、オプション1に進みます。

オプション1:「検証をまったく共有しない」これも問題ありません。ただし、検証が変更されると、バックエンドとフロントエンドの検証の同期を保つために十分な努力が必要になります。これはバグの可能性を高めます。

私はオプション2から始めて、必要に応じてケースバイケースでオプション1に移動します。

Node js back endの特定のケースでは、フロントエンドとバックエンドの間で検証ロジックを共有できます。

WebAssemblyの人気が高まっているので、検証にWebAssemblyを使用してみることができます。このようにして、ブラウザでJavaまたはC#またはいくつかの他の言語コードを実行できます(このオプションについてはあまり調べていません)。