2012-04-18 13 views
3

Webサービス経由で通信する2つのシステムがあります。それらをフロントエンドとバックエンドと呼んでください。処理の多くは、バックエンドのリストを更新することです。たとえば、フロントエンドは特定の人物を更新する必要があります。現在、私たちはインタフェースが何であるべきかを決定するバックエンドを設計しています。基礎となるデータベースを更新するために実際のデータベースIDが必要になりますが、消費者へのデータベースIDの伝播が悪い場合もあります。WebサービスでIDを処理するためのベストプラクティスは何ですか?

特定のエンティティを更新するには、Webサービスに再びIDを送信するために持っているクライアント(すなわちフロントエンド)を強制的にではいくつかの選択肢は何ですか?フロントエンドは、これらの変更を保存して後で送信することがあるため、IDを避けようとするもう1つの理由があります。これは、フロントエンドが自分のシステムに私たちのIDを保存する必要がありますが、それはまた悪い考えです。

私たちは次のことを考えた:

1)は、バックフロントエンドにデータベースIDを送信します。それらはバックフロントエンドに)変化

2)データベースIDのオフに基づいて(ハッシュIDの送信を処理するためにこれらを返送しなければなりません。彼らは変化を処理するためにこれらを返さなければならないでしょう。

3)は、全てのIDを送信するようにクライアントを強制しませんが、それらは、データベース内の私達のエンティティに元のエンティティと新しいエンティティと「一致」を送ってきました。元のエンティティは保存されたエンティティと一致する必要があります。私たちはまた、エンティティと新しいエンティティとのマッチを構成するものを定義する必要があります。

+0

yipes - 1と2は本質的に同じように感じます。また3 - 一致を作るものを定義するとき - それはほぼ確実にキーであるIDになります。(または醜い - すべての代替キーを見つける) – Randy

答えて

3

フロントエンドの妥当な唯一の方法は、DB内の人物を特定することです。

完全なエンティティをマッチングすることは信頼性が低く、明らかではありません。ハッシュされたIDをフロントエンドに返すためには、フロントエンドからハッシュされていないIDを最初に受け取るか、IDの下でリバーシブルな「ハッシング」(「暗号化」のように)を実行する必要があります。

IMHOデータベースIDか、IDを抽出できるデータ(暗号化されたデータベースID)かどうかは関係ありません。なぜあなたはデータベースIDを知っている消費者が悪い考えであると思いますか?すべての人が単一の消費者に属していれば問題はありません。

人物(DB内のオブジェクト)とコンシューマの間に多対多の関係がある場合、暗号化がコンシューマに依存するようにオブジェクトIDを(広義には)暗号化することができます。たとえば、コンシューマとの通信では、DB内の(オブジェクトとコンシューマ間の)エントリのIDを使用できます。

消費者がすべてのIDを1つずつ列挙する可能性があるため、消費者にIDを送信することが悪い考えである場合は、整数の自動インクリメントIDではなくGUIDを使用してこの問題を回避できます。

PS:あなたのコメントについては、たとえばオブジェクトIDとしてのGUID。 IDはスキーマの一部ではなくデータの一部であるため、データベース間の移行時に保持されます。そのようなIDには機密情報も含まれないので、IDを消費者(または他の人)に明らかにすることは完全に安全です。同じSSNを持つ2人の異なる人物の作成を防止するには、SSNフィールドにUNIQUEキーを追加しますが、IDの一部としてSSNを使用しないでください。このようなアプローチには多くの重大な欠点があります。彼らの中で最も小さい。

+0

データベースIDの送信に躊躇している主な理由は2つのシステムをいくらか結合します。データベースを変更することに決めた場合、これはフロントエンドに影響を与える可能性があります。さらに、例えば、自然キー(例えば、ssnに基づく)の場合、IDには機密情報が含まれることが考えられます。私たちは実用的であるように努めていますが、ベストプラクティスにも従っています。入力いただきありがとうございます。 – tjg184

+1

1)データベースを変更してもIDは変更されません。 2)IDは自然キーであってはならない。何らかの理由でSSNが変更される場合(たとえば、間違って誤ったSSNを入力したなど)、他の国の顧客をサポートする必要がある場合はどうなりますか?あなたは間違った終わりから問題を見ている。最初に間違ったデータ構造(機密情報を含むIDとDB再加工で変更される)を実装し、IDを知らずにオブジェクトを操作する方法を実装しようとしています。 – penartur

2

私の考えでは、レコードのIDは誰にも機密情報を伝えません。
結果として、データベースIDをフロントエンド(一般的に)に送信することに問題はありません。
唯一の懸案事項はデータベースの一貫性の問題ですが、私は何も見えません。
また、データベースIDを検索するためにデータベースの属性をクエリする必要がないため、パフォーマンスが優れています。

さらに、IDのハッシュを送信すると、ハッシュからIDを抽出できません。
あなたはハッシュと一致するデータベース内のidを見つけなければならないだろう、それはIMOので

良いではありません。

悪い考えかもしれない、私たち消費者にデータベースIDを伝播どこにも見

私はそれを見ません。なぜあなたが悪い考えであると思うかを説明することができれば、議論があるかもしれません。

+0

他の答えに私のコメントを参照してください。私の主な議論は、データベースIDがナチュラルキーを使用していた場合、システムの結合とセキュリティ問題の可能性があります。 – tjg184

+0

1)データベースがSSNであれば、それはおそらく問題かもしれませんが、それともそれは理にかなっているのですか?2)結合について:データベースを変更すると、データは破棄されません。新しいデータベースに移行する必要があります。 – Jim

+0

1)我々は理論的に話している。 2)はい、スキーマは変更される可能性がありますが、スキーマとデータベースが独立して進化してもいいと思います。非理論的な観点からも、これはかなり一般的であり、それらは異なってモデル化される。データベースは実際のスキーマとは異なって正規化されます。コメントありがとう。 – tjg184

関連する問題