Включает ли Microsoft Graph API @ odata.type символ "#"? - PullRequest
0 голосов
/ 14 июля 2020

API Microsoft Graph основан на OData, и каждый объект имеет @odata.type

Если посмотреть на тип ресурса пользователя , @odata.type будет #microsoft.graph.user"

{
  "@odata.type": "#microsoft.graph.user",
  "id": "String (identifier)",
  "deviceEnrollmentLimit": 5
}

Но в примере из тип ресурса группы @odata.type равен microsoft.graph.user и не начинается с #

{
  ...
  "members": [ { "@odata.type": "microsoft.graph.directoryObject" } ],
  "membersWithLicenseErrors": [{"@odata.type": "microsoft.graph.user"}],
  ...
}

Типы * Раздел 1020 * языка определения общей схемы OData версии 4.0 (CSDL), похоже, не указывает на какой-либо стандарт, связанный с этим топом c.

Вопрос: Является ли # символьная часть определенного Microsoft @odata.type или часть OData spe c или просто соглашение, которое используют некоторые поставщики OData?

Ответы [ 2 ]

2 голосов
/ 15 июля 2020

I wi sh на этот вопрос был простой ответ. В спецификации OData, описывающей формат OData JSON, говорится следующее:

Для полезных данных, описываемых заголовком OData-Version со значением 4.0, это имя ДОЛЖНО быть предварено префиксом ha sh символ (#); для полезных нагрузок, отличных от OData 4.0, значения встроенных примитивных типов ДОЛЖНЫ быть представлены без символа ha sh, но потребители полезных данных 4.01 или выше ДОЛЖНЫ поддерживать значения с символом ha sh или без него.

http://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#_Toc499720587

Бета-версия Microsoft Graph поддерживает 4.01, но большая часть API V1.0 использует 4.0. Лучшим вариантом будет всегда включать символ ha sh для непримитивных типов.

1 голос
/ 15 июля 2020

Примечание : пометить ответ Даррела как правильный, поскольку он нашел это, но отвечая другим способом

Из Graph Explorer вы можете исследуйте $metadata напрямую, используя https://graph.microsoft.com/v1.0/$metadata

Пространство имен, определенное в схеме, - microsoft.graph

<Schema Namespace="microsoft.graph" Alias="graph" xmlns="http://docs.oasis-open.org/odata/ns/edm">

, а для рассматриваемого объекта имя типа user

<EntityType Name="user" BaseType="graph.directoryObject" OpenType="true">

Итак, я бы сделал вывод, что тип с полным пространством имен на самом деле microsoft.graph.user с псевдонимом graph.user, но значение @odata.type равно #microsoft.graph.user, потому что для него требуется символ # (ha sh символ) согласно OData JSON Формат SP c.

...