web-dev-qa-db-ja.com

ブログのWebサイトで「設定された」セマンティック入力JSON配列パラメーターを検証するとき、サイレントに無視するか、エラーを報告するときの好ましい方法は何ですか?

私はブログのWebサイトを開発しています。投稿ごとに、stackoverflowのようにタグのリストがあります。

サーバー側では、blog/editのようなAPIをクライアント側に公開し、リクエストパラメータは次のようにすることは間違いありません。

class BlogEditParam{
    private List<String> tags;
}

したがって、タグ名が存在するかどうかを確認するなど、サーバー側のtagsフィールドを検証する必要があることは間違いありません。

ただし、tagsフィールドには「セット」セマンティックがあり、重複することはできません。たとえば、投稿に次のようなタグリストを含めることはできません:c++, Java, c++

入力パラメーターの重複の可能性を処理するときはどうすればよいですか?私には2つの戦略があるようです:

  1. 黙って無視してください。上記の例では、サーバー側の重複をすべて削除し、このリクエストを受け入れます(もちろん、c++およびJavaタグは存在する検証に合格する必要があります)
  2. そのような重複を見つけたときにクライアント側にエラーを報告する

このブログアプリケーションシナリオで推奨される方法は何ですか?


サーバー側フレームワークとしてSpring Bootを使用しています。それはリクエストボディをデシリアライズするためにジャクソンを使用しています、私は私が次のような入力パラメーターを書くことができることを知っています:

class BlogEditParam{
    private Set<String> tags;
}

しかし、実際には、逆シリアル化を行うときに重複を無視するだけなので、上記の最初の戦略と同じです。

2
user8510613

しかし、フロントエンドの誰かがこれらの複製されたタグを数百、数千、または数百万すべて一度に送信することを決定した場合はどうなりますか?

扱えますか? (両側に?)

Imho、これを処理する最も簡単な方法は、たとえば、フロントエンドのユーザーインターフェイスが、これらのタグのデータの「チップのような」エントリを使用するようにすることです。これは、ドロップダウンなどから取得できます。フロントエンドのすべてのタグをセットのような構造にしておくか、または、ユーザーがC++を追加した場合でも、タグに「一度クリックして削除する」セマンティクスを許可することで、再び可能なオプションになります。

これを処理するには多くの方法がありますが、目的は、ネットワーク全体のトラフィックの負荷を軽減することです。

フロントエンドでデータを可能な限り準備し、サニタイズおよび検証します。

1
Bruno Oliveira