如何获取租户中所有的Team
大家在使用Graph API開發Teams App的時候,有時候會需要獲取某個租戶Tenant的所有team,在寫這篇文章的時候Graph API并沒有提供這么一個功能,沒有一個類似于”GET /teams”的api。
在Micorsoft Graph官方文檔的已知問題中,也提到了目前不支持這么一個api。
https://docs.microsoft.com/en-us/graph/known-issues?view=graph-rest-beta#get-teams-is-not-supported
那如果我們開發的app想要獲取team列表,有其他什么方法嗎?
我們現在想一下Microsoft Teams中每個team是一個什么概念?在AzureAD中,一個team實際上就是一個AzureAD中的group。group是可以通過graph api來列舉的。實際上在Group中有一個屬性叫resourceProvisioningOptions,它的定義如下:?https://docs.microsoft.com/en-us/graph/group-set-options
| Teams | Provision this group as a team in Microsoft Teams. Additionally, this value can be added to the resourceProvisioningOptions string collection on group update through a?PATCH?operation, in order to convert an existing Microsoft 365 group to a team. | The group is a regular Microsoft 365 group without Teams capabilities. |
可以知道,原來我們通過這個屬性就可以來判斷這個group是不是一個Teams里的team。
GET /groups?$select=id,resourceProvisioningOptions這個接口會返回如下的內容
{"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups","value": [{"id": "00e897b1-70ba-4cb9-9126-fd5f95c4bb78","resourceProvisioningOptions": []},{"id": "00f6e045-f884-4359-a617-d459ee626862","resourceProvisioningOptions": ["Team"]}] }可以發現第一個group不是team,第二個group是,因為第二個group的?resourceProvisioningOptions?里含有?Team。
看到這里,大家可能會問,一個租戶里的group有很多,我如果拿到了所有的group,再自己過濾是不是有點浪費。有沒有更好的方法來直接返回所有的team?
有!我們需要借助方便的OData查詢語法,如下:
GET /groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')上面這個調用就可以返回租戶中的所有的team,實際上就是?GET /teams?要做的東西了。注意上面的?$filter?的表達式,如果大家想具體深入的學習這些查詢條件的語法,可以查看這個文檔,學會了后你會覺得使用graph api原來如此方便。可以把很多原來需要在查詢端做的事情,都讓graph api服務來完成。
https://docs.microsoft.com/en-us/graph/query-parameters#filter-parameter
總結
以上是生活随笔為你收集整理的如何获取租户中所有的Team的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python绘制了若干张词云图,惊艳了
- 下一篇: 21岁开始练字晚不晚?