私はブログのWebサイトを開発しています。投稿ごとに、stackoverflowのようにタグのリストがあります。
サーバー側では、blog/edit
のようなAPIをクライアント側に公開し、リクエストパラメータは次のようにすることは間違いありません。
class BlogEditParam{
private List<String> tags;
}
したがって、タグ名が存在するかどうかを確認するなど、サーバー側のtags
フィールドを検証する必要があることは間違いありません。
ただし、tags
フィールドには「セット」セマンティックがあり、重複することはできません。たとえば、投稿に次のようなタグリストを含めることはできません:c++, Java, c++
入力パラメーターの重複の可能性を処理するときはどうすればよいですか?私には2つの戦略があるようです:
c++
およびJava
タグは存在する検証に合格する必要があります)このブログアプリケーションシナリオで推奨される方法は何ですか?
サーバー側フレームワークとしてSpring Bootを使用しています。それはリクエストボディをデシリアライズするためにジャクソンを使用しています、私は私が次のような入力パラメーターを書くことができることを知っています:
class BlogEditParam{
private Set<String> tags;
}
しかし、実際には、逆シリアル化を行うときに重複を無視するだけなので、上記の最初の戦略と同じです。
しかし、フロントエンドの誰かがこれらの複製されたタグを数百、数千、または数百万すべて一度に送信することを決定した場合はどうなりますか?
扱えますか? (両側に?)
Imho、これを処理する最も簡単な方法は、たとえば、フロントエンドのユーザーインターフェイスが、これらのタグのデータの「チップのような」エントリを使用するようにすることです。これは、ドロップダウンなどから取得できます。フロントエンドのすべてのタグをセットのような構造にしておくか、または、ユーザーがC++を追加した場合でも、タグに「一度クリックして削除する」セマンティクスを許可することで、再び可能なオプションになります。
これを処理するには多くの方法がありますが、目的は、ネットワーク全体のトラフィックの負荷を軽減することです。
フロントエンドでデータを可能な限り準備し、サニタイズおよび検証します。