2017-07-26 61 views
1

这是从类“异常行为” - 采取以下查询(你可以将其粘贴在图形浏览器):处理在Microsoft Graph中不存在的属性的

https://graph.microsoft.com/v1.0/users?$filter=idc eq 'test' 

这将返回状态代码400“属性'idc'不存在作为声明的属性或扩展属性。“这是一个明智而可理解的回应。现在

,如果尝试$选择此属性:

https://graph.microsoft.com/v1.0/users?$select=idc 

我得到一个结果,我完全没有想到:

{ 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(idc)", 
    "@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$select=idc&$skiptoken=cut", 
    "value": [ 
     {}, 
     {}, 
... 
     {} 
    ] 
} 

(一个空的对象列表;要求单一具有该无效属性名称的用户返回我一个emtpy响应)。

所以我的问题是 - 为什么$过滤错误和$选择不?有没有办法强制$ select也出错? (例如,我使用的是/测试端点和属性名称的变化 - 我希望我的代码失败,找出)

回答

0

对不起,我迟到的答案。我们就此进行了讨论,并希望得到您的一些想法(以及其他开发人员的想法)。我们现在还没有明确的答案。

这里有思想的2所学校:

  1. 将$选择与不存在的性能问题时$过滤器行为一致。
  2. 这些行为可以不同,因为调用者在指定$ select时的意图可能不同于$ filter。该服务无法忽略$ filter中指定的属性,因为它完全更改了返回的对象集合。但是,$ select不会更改对象集合,但只会删除不可用的属性。因此$ select和$ filter不需要一致。

的思考?

希望这有助于

+0

我的偏向#1 - 这样可以节省我的时间搞清楚我做错了什么的时候,我本来期望不返回某些属性。但是,如果决定进入第二个层面:至少以某种方式唤起行为差异,没有人会惊讶。 –

+0

我也会说#1,即使这两种情况都符合你描述的方式,我认为类似的行为(在非现有属性上抛出错误)消除了所有的混淆,甚至可能使一些人免于错别字:) –