21

コーディング時間が明らかに向上したため、つまり、Javascript内でサーバーから直接モデルデータにアクセスできるようになったため、 breeze.jsを使い始めたばかりです(私はここでは初心者なので、明らかに裸です!)。

過去には、ストックajax呼び出しを使用してサーバーにデータを取得/投稿しました。また、過去にいくつかの異なるクライアントツールを使用して、jLinqなどのローカルデータのクエリに役立つものを提供しました。

私の質問はこれです。Javascriptで本質的に完全なモデルクエリアクセスを持つことは危険ではありませんか?それは本当によく考えられたツールのように見えるので、私は何かを見逃しているに違いありません。以前は、少なくともバックエンドクエリプロセスを介してクライアントに送信できるものを制御し、jLinqなどを使用してデータをフィルタリングすることもできました。また、直接クエリを取得することでトレードオフを理解することもできます。なし-ローカルモデルの問題を複製しないので、誰かがこれに何らかの洞察を提供できれば?

ありがとう!

編集 明らかに私だけではありませんが、合理的な応答があると思います-おそらくDTOメソッドなどを使用して要求されているデータを制限しますか?投稿された他の質問はここにあります

4

3 に答える 3

14

完全なビジネスモデルを公開することは危険な場合があります。クライアントに公開したいモデルのその部分でさえ、無制限のクエリを許可することは危険な場合があります。これは、クエリが簡単なAPIを提供する場合でも、クエリが難しいAPIを提供する場合でも当てはまります。

そのため、私たちのチームはサービスの構築方法に注意を払っています。

クライアントアプリに必要なタイプのみを公開する必要があります。あるタイプの許可されたインスタンスへのアクセスを制限する場合は、慎重に規定されたクエリ不可能なサービスメソッドを記述できます。ブリーズはそれらをうまく呼ぶことができます。すべてのリクエストにBreezeクエリ機能を使用する必要はありません。キャッシュ、関連エンティティナビゲーション、変更追跡、検証、保存バンドル、キャッシュクエリ、オフラインサポートの恩恵を受けることができます。

繰り返します。サービスメソッドはIQueryableを返す必要はありません。IQueryableを返す場合でも、サービスメソッドを簡単に記述して、クエリ結果をユーザーが表示を許可されているエンティティのみに制限できます。

幸い、同じサービスまたは共同サービスで2つのアプローチを組み合わせることができます。

Breezeはあなたに選択肢を与えます。それらの選択を賢く行使するのはあなた次第です。外に出て、要件に合うようにサービスを設計します。

于 2012-12-03T20:11:18.890 に答える
4

Breezeは、その意味でビジネスロジックになることを意図したものではありません。Javascriptで何かを行う場合、誰でもそれを行うことができるという経験則を念頭に置いて、必要に応じて自分のサービスデータの可視性を制限する必要があります。

言い換えれば、とにかくデータを公開するつもりなら、それはあなたにとって役に立ちます。ただし、公開して誰でもクエリできるようにすることに満足しているエンティティのみを公開してください。別の見方をすれば、APIがWebサイトのパブリックAPIになるということです(ただし、宣伝して全員に使用するように指示するAPIではありません)。

バックエンド実装のスキーマに依存関係が作成されているため、私は個人的にこの方法を行うのが好きではありません。データベーステーブルに変更を加えたい場合は、Javascriptを考慮に入れる必要があります。統合と単体テストの面でも欠けています。

ただし、サービスメソッドやその実装のさまざまなレイヤーを構築することなく、機密性の低いデータに基づいてWebサイト機能をすばやく構築したい場合に使用できます。

于 2012-12-02T16:10:01.803 に答える
4

メタデータを公開するときはどうですか?それは危険だとは考えられていませんか。IMHOは、DbContextからメタデータを公開するのは安全ではありません。クライアントでメタデータを作成できることは知っていますが、重要なのは(安全であれば)できるだけ早く物事を行うことです。

于 2012-12-03T12:52:41.027 に答える