Isn';使用breezejs在javascript中使用查询信息是否危险?

Isn';使用breezejs在javascript中使用查询信息是否危险?,javascript,breeze,Javascript,Breeze,刚刚开始玩,因为在编码时间上有了明显的进步,即在Javascript中直接从服务器访问模型数据(我在这里是新手,显然是赤裸裸的!) 在过去,我使用股票ajax调用来获取/发布数据到服务器,在过去,我使用了一些不同的客户机工具来提供查询本地数据的帮助,例如 我的问题是。在Javascript中拥有基本上完整的模型查询访问权不是很危险吗?我一定错过了什么,因为它看起来像是一个经过深思熟虑的工具。在过去,我至少控制了通过后端查询过程可以发送给客户机的内容,并且再次使用类似jLinq等的工具,我可以过滤

刚刚开始玩,因为在编码时间上有了明显的进步,即在Javascript中直接从服务器访问模型数据(我在这里是新手,显然是赤裸裸的!)

在过去,我使用股票ajax调用来获取/发布数据到服务器,在过去,我使用了一些不同的客户机工具来提供查询本地数据的帮助,例如

我的问题是。在Javascript中拥有基本上完整的模型查询访问权不是很危险吗?我一定错过了什么,因为它看起来像是一个经过深思熟虑的工具。在过去,我至少控制了通过后端查询过程可以发送给客户机的内容,并且再次使用类似jLinq等的工具,我可以过滤数据等。我还可以理解可能与获得直接查询/无重复本地模型问题之间的取舍,那么是否有人可以对此提供一些见解

谢谢

编辑 显然,我不是唯一的一个,但我猜这是一个合理的响应-可能会限制使用DTO方法或其他方法请求的数据

从这个意义上讲,Breeze不是你的业务逻辑。请记住一条经验法则,如果您使用Javascript执行某些操作,任何人都可以执行,那么您应该根据需要限制自己的服务数据的可见性

换句话说,如果您想让数据公开,那么它对您很有用。但只公开你乐于公开的实体,并允许任何人查询;另一种看待它的方式是,您的API成为您网站的公共API(但不是您宣传并告诉每个人使用的API)

我个人不喜欢这样做,因为在后端实现的模式上创建了依赖关系。如果我想更改我的数据库表,我现在必须考虑我的Javascript。我还缺乏集成和单元测试方面的知识


但是,如果您希望在非敏感数据上快速构建网站功能,而不必构建服务方法和它的各个实现层,那么它也有其用途

当您公开元数据时会怎样?这难道不危险吗。IMHO从DbContext公开元数据是不安全的。我知道您可以在客户机上构建元数据,但关键是要尽快(如果安全的话)进行操作。

公开完整的业务模型可能会很危险。允许不受限制地查询模型中要向客户机公开的部分,这可能是危险的。无论您提供的是易于查询的API还是难以查询的API,都是如此

这就是为什么我们的团队在构建服务时非常谨慎

您应该只公开客户端应用程序需要的类型。如果要限制对某一类型的授权实例的访问,可以编写仔细指定的不可查询的服务方法。微风可以说他们很好。您不必对每个请求都使用Breeze查询工具。您仍将受益于缓存、相关实体导航、更改跟踪、验证、保存绑定、缓存查询和脱机支持

重复:您的服务方法不必返回IQueryable。即使它们返回IQueryable,您也可以轻松编写服务方法,将查询结果约束到用户有权查看的实体

幸运的是,您可以在同一个服务或协作服务中混合这两种方法


微风给你选择。这取决于你如何明智地做出这些选择。走出去,设计您的服务以满足您的需求

什么样的危险?您的模型是否包含不应向客户公开的敏感数据?嘿,响应良好,谢谢。我想我是沿着同样的路径重新思考的:只公开你真正想要的数据,也就是说,如果你的模型有一堆属性,包括不应该在外部可见的项,那么使用DTO只传输那些你希望可见的元素。我想我只是想得到一些确认,以防我遗漏了什么,所以再次感谢您的回复。您当然只能通过Web API中的DTO公开您想要的内容,然后Breeze只能获得这些内容。我认为关于你的话题实际上是站不住脚的。如果向表中添加字段,则必须更新业务模型中的一些代码。您可以选择不更新DTO,这样更改就不会影响JavaScript。所以有很多方法可以通过分离模式来解决这个问题;DB更改不仅限于向表中添加列。您可以删除列、移动表、拆分表、更改数据库提供程序。如果我有一个API,我希望保持分离,这样任何模式更改都不会影响客户端。只有当我的接口合同需要更改时,我才乐意对API进行版本设置并通知客户。这是客户端查询模型难以实现的分离。首先,您只需要担心在客户端模型中公开的表支持类型,而不是数据库中的每个表。db提供程序是不相关的,无论ORM与否。您公开的是服务,而不是数据库。您的ORM应该为您提到的Db更改提供额外的抽象。根据我的经验,如果不希望UI中出现类似的更改,则很难彻底删除模型实体。业务原因是模型更改的典型驱动因素,这些驱动因素流向UI。与此同时,“分离”的额外努力增加了复杂性和成本,这可能永远不会有回报。雅格尼?多亏了这里的所有人。。评论真的很好,很有价值。听着,我想我也学到了很多新东西,比如webapi等等。。平心而论,我没有太多考虑DTO之类的东西。。浏览了S的几个例子