Запрос JSON API-интерфейса Microsoft Graph не выполнен - PullRequest
1 голос
/ 15 марта 2019

Я занимаюсь разработкой приложения, использующего Microsoft Graph с использованием Python 3.6.

Я получаю очень странное поведение при запросе Graph API, который использует данные запроса в качестве вложенного JSON.

Это успешный запрос:

url = f "https://graph.microsoft.com/v1.0/users/{user_id}"
headers = {
  'Authorization': f 'Bearer {office365_access_token}',
  'Content-Type': 'application/json'
}
data = {
  "city": "Tokyo"
}
req = urllib.request.Request(url, json.dumps(data).encode("utf-8"), headers = headers, method = 'PATCH')
urllib.request.urlopen(req)

Сбой следующего обрыва с ошибкой HTTP Error 400.В документации указано, что свойство skills является коллекцией строк, поэтому я использовал значения массива строк:

url = f "https://graph.microsoft.com/v1.0/users/{user_principal_name}"
headers = {
  'Authorization': f 'Bearer {office365_access_token}',
  'Content-Type': 'application/json'
}
data = {
  "skills": ["swift", "python"]
}
req = urllib.request.Request(url, json.dumps(data).encode("utf-8"), headers = headers, method = 'PATCH')
urllib.request.urlopen(req)

Единственное отличие состоит в том, является ли значение строкой или нет,Я могу вывести словарь данных в строку JSON, поэтому я не думаю, что код неправильный, но я не знаю, почему возникает эта ошибка.

1 Ответ

1 голос
/ 15 марта 2019

Похоже, это ошибка , связанная с самим Microsoft Graph, в частности с User обновление операция . Например, следующий запрос:

PATCH https://graph.microsoft.com/v1.0/me
Content-type: application/json
{
  "skills": [
    "Fortran",
    "Cobol"
  ],
  "city": "Helsinki"
}

действительно завершается ошибкой и возвращает следующую ошибку:

{
    "error": {
        "code": "BadRequest",
        "message": "The request is currently not supported on the targeted entity set"
    }
}

Одновременно обновляется другое свойство пользователя, например свойство User.otherMails, которое имеет тот же тип Collection(Edm.String), что и User.skills:

PATCH https://graph.microsoft.com/v1.0/me
Content-type: application/json


{
  "otherMails": [
    "office365admin@gmail.com",
    "office365admin@yahoo.com"
  ],
  "city": "Helsinki"
}

успешно завершено.

1024 * Обход *

Похоже, что происходит сбой, когда skills свойство User ресурс обновляется вместе с другими свойствами. Но если only , свойство skills обновляется

PATCH https://graph.microsoft.com/v1.0/me
Content-type: application/json

{
  "skills": [
    "Fortran",
    "Cobol",
    "C"
  ]
}

ошибка не возникает и операция успешно завершается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...