Microsoft Graph Explorer中返回的不同用户对象

时间:2018-01-25 17:16:24

标签: json microsoft-graph

我正在使用Microsoft Graph API。但是,我有一个问题/关注API为用户返回不同的值,具体取决于调用哪个端点。

以下是https://graph.microsoft.com/v1.0/me/端点的示例返回值。

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
    "id": "VALUE GOES HERE",
    "businessPhones": [],
    "displayName": "Lname, Andrew",
    "givenName": "Andrew",
    "jobTitle": "MY TITLE",
    "mail": "andrew.lname@email.com",
    "mobilePhone": null,
    "officeLocation": "123 Business Street",
    "preferredLanguage": null,
    "surname": "Lname",
    "userPrincipalName": "andrew.lname@email.com"
}

调用/me/manager/users/{ID}

时,此格式保持不变

然而,当我们调用/me/people时,我们会得到一个更大更完整的用户对象。

{
    "id": "ID VALUE HERE",
    "displayName": "LName, Andrew",
    "givenName": "Andrew",
    "surname": "LName",
    "birthday": "",
    "personNotes": "",
    "isFavorite": false,
    "jobTitle": "MY TITLE",
    "companyName": "MY COMPANY NAME",
    "yomiCompany": "",
    "department": "MY DEPARTMENT",
    "officeLocation": "123 Business Street",
    "profession": "",
    "userPrincipalName": "andrew.lname@email.com",
    "imAddress": "sip:andrew.lname@email.com",
    "scoredEmailAddresses": [{
        "address": "andrew.lname@email.com",
        "relevanceScore": 285
    }],
    "phones": [{
        "type": "business",
        "number": "(555) 555-5555"
    }],
    "postalAddresses": [],
    "websites": [],
    "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
    }
}

首先,是否有人知道为什么存在差异,更重要的是,是否有人知道我如何能够始终检索更强大的用户对象?

2 个答案:

答案 0 :(得分:1)

有几件事情在发生:

  1. personuser个对象是具有不同属性的不同资源。例如,person可以代表来自Outlook的个人联系人,来自您的组织GAL的联系人,或者来自最近的电子邮件或Skype通信。将此与user进行对比,user始终代表组织Active Directory中的用户。

  2. 当您检索没有$select参数的user对象时,Microsoft Graph将仅返回/me属性的子集。这样做是为了通过减少默认返回的属性数量来节省带宽(您可能会因为DisplayName只需要检索businessPhones的次数而感到震惊。来自documentation

      

    注意:获取用户仅返回一组默认属性(displayNamegivenNameidjobTitlemail,{{1} },mobilePhoneofficeLocationpreferredLanguagesurnameuserPrincipalName)。使用$select获取用户对象的其他属性和关系。

    换句话说,当您致电/v1.0/me时,Microsoft Graph会自动将$select=businessPhones,displayName,givenName,id,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName附加到您的请求中。如果您指定自己的$select,但它将使用您提供的那个。

答案 1 :(得分:0)

我与MSFT就此问题进行了几次对话。在这个时候,他们无法回答。他们认识到/ me用户对象和/ people用户对象之间的数据模型和数据值是不同的,但他们不知道它们是如何或为何不同。它们显然是来自不同数据源的不同数据模型,但没有关于它们从何处获取数据的图表。有人告诉我,这仍然只是测试版,他们将在发布之前协调两个数据模型,但他们不确定发布的时间。