Есть ли способ массового удаления всех разрешений файла с помощью IGraphServiceClient?

В рамках действия пользователя мы используем MS Graph Java SDK, чтобы сначала перечислить все разрешения для файла, а затем перебираем список разрешений для удаления каждого из них по отдельности. Похоже, у этого есть проблемы с производительностью. Нам было интересно, есть ли способ группировать вызовы с помощью IGraphServiceClient.

Соответствующие используемые API:


person Bill Collab    schedule 22.01.2020    source источник


Ответы (1)


Вы можете делать пакетные запросы.

1. Создайте шаги запроса MSBatch (примеры ниже)

Request requestGetMe = new Request.Builder().url("https://graph.microsoft.com/v1.0/me/").build();
List<String> arrayOfDependsOnIdsGetMe = null;
MSBatchRequestStep stepGetMe = new MSBatchRequestStep("1", requestGetMe, arrayOfDependsOnIdsGetMe);
Request requestGetMePlannerTasks = new Request.Builder().url("https://graph.microsoft.com/v1.0/me/planner/tasks").build();
List<String> arrayOfDependsOnIdsGetMePlannerTasks = Arrays.asList("1");
MSBatchRequestStep stepMePlannerTasks = new MSBatchRequestStep("2", requestGetMePlannerTasks, arrayOfDependsOnIdsGetMePlannerTasks);
String body = "{" + 
        "\"displayName\": \"My Notebook\"" + 
        "}";
RequestBody postBody = RequestBody.create(MediaType.parse("application/json"), body);
Request requestCreateNotebook = new Request
    .Builder()
        .addHeader("Content-Type", "application/json")
    .url("https://graph.microsoft.com/v1.0/me/onenote/notebooks")
    .post(postBody)
    .build();
MSBatchRequestStep stepCreateNotebook = new MSBatchRequestStep("3", requestCreateNotebook, Arrays.asList("2"));

2. Создайте содержимое запроса MSBatch и получите содержимое.

List<MSBatchRequestStep> steps = Arrays.asList(stepGetMe, stepMePlannerTasks, stepCreateNotebook);
MSBatchRequestContent requestContent = new MSBatchRequestContent(steps);
String content = requestContent.getBatchRequestContent();

3. Выполните вызов конечной точки $ batch.

OkHttpClient client = HttpClients.createDefault(auth);
Request batchRequest = new Request
    .Builder()
    .url("https://graph.microsoft.com/v1.0/$batch")
    .post(RequestBody.create(MediaType.parse("application/json"), content))
    .build();
Response batchResponse = client.newCall(batchRequest).execute();

4. Создание содержимого ответа MSBatch.

MSBatchResponseContent responseContent = new MSBatchResponseContent(batchResponse);
Response responseGetMe = responseContent.getResponseById("1");
// Use the response of each request
person Darrel Miller    schedule 25.01.2020
comment
Есть ли способ сделать эти пакетные запросы, используя IGraphServiceClient, а не OkHttpClient? - person Bill Collab; 27.01.2020
comment
@BillCollab Должно быть. Мы добавили поддержку этого в библиотеку .NET. Мне нужно проверить, сделали ли мы это и с Java. Сказав, что OkHttpClient по-прежнему будет иметь промежуточное ПО Graph для обработки дросселирования и аутентификации. - person Darrel Miller; 29.01.2020