2017-10-20 75 views
2

从组API和/Conversations终点即可获得对话的列表,并在组应用程序看,当你可以看到图像的用户。如何在Microsoft Graph Groups API中获得用户参考?

但数据从API返回的没有任何利好数据使用用户查找。

我至少会想到一个电子邮件地址,而不是仅仅是远离唯一的名称。有没有一种有效的方式让用户不需要遍历所有的线程和文章?从API

数据:

{ 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups('{id}')/threads", 
    "value": [{ 
      "id": "{id}", 
      "topic": "Test main thread", 
      "hasAttachments": false, 
      "lastDeliveredDateTime": "2017-10-20T11:35:04Z", 
      "uniqueSenders": [ 
       "Jonas Stensved" 
      ], 
      "preview": "{message preview content}", 
      "isLocked": false 
     }, 
     { 
      "id": "{id}", 
      "topic": "The new Test group is ready", 
      "hasAttachments": false, 
      "lastDeliveredDateTime": "2017-10-13T10:33:03Z", 
      "uniqueSenders": [ 
       "Test" 
      ], 
      "preview": "{message preview content}", 
      "isLocked": false 
     } 
    ] 
} 

如何在组应用一组看起来:

[Groups App on iOS]

回答

1

这可能有助于打破对象层次这里:

  1. Group - 父母交谈资源的集合
  2. Conversation - 父线程资源集合
  3. Thread - 家长对发布资源的集合
  4. Post - 用户发送给本集团的实际内容

要查看哪个User资源映射到给定的Thread,您需要向下钻取另一个级别以查找线程中包含的Post资源。

您可以使用$expand=posts参数扩大Posts集合做到这一点。您也可以($select=from)$expand,因此您只能返回您需要映射回User资源的属性。

所以这个查询:

/v1.0/groups/{group-id}/threads?$expand=posts($select=from) 

将为您提供这样的Thread结果:

{ 
    "id": "{thread-id}", 
    "topic": "New Training Plans", 
    "hasAttachments": false, 
    "lastDeliveredDateTime": "2017-07-31T18:59:05Z", 
    "uniqueSenders": [ 
     "HR Taskforce" 
    ], 
    "preview": "{thread-preview}", 
    "isLocked": false, 
    "[email protected]": "https://graph.microsoft.com/v1.0/$metadata#groups('{group-id}')/threads('{thread-id}')/posts(from)", 
    "posts": [{ 
     "@odata.etag": "W/\"CwAAABYAAADE9kXbLjqkSJUGeLzs6eumAAAAAA0/\"", 
     "id": "{post-id}", 
     "changeKey": "CwAAABYAAADE9kXbLjqkSJUGeLzs6eumAAAAAA0/", 
     "from": { 
      "emailAddress": { 
       "name": "HR Taskforce", 
       "address": "[email protected]" 
      } 
     } 
    }] 
} 

你可以试试这个自己使用this Graph Explorer example。当然

+0

当然,这是可能的,但这会让客户变慢。如果我有10 000个用户在每个负载上遍历线程,该怎么办? –

+0

有效负载的大小可能会产生影响,但您可以通过选择必要的最小数量的字段来缓解这一点。如果用户想深入研究,您可以随时拨打其他详细信息。另一个选项(我使用了很多)将结果缓存在服务器上很短的时间。这消除了500个对您的后端的同时请求变成对Graph的500个同时调用。拥有10-30秒的缓存可以对性能产生巨大影响。 –

+0

是的,但我仍然会说它有点令人惊讶,你没有得到任何独特的用户参考。至少一封电子邮件将不胜感激。 仍然需要缓存所有内容,长期使用webhooks来更新缓存,以便能够以任何有意义的方式使用Graph API。 –

相关问题