Table of contents

Пакетная обработка | Общие понятия API GraphBatch processing | Graph API concepts

Jimaco Brannian|Последнее обновление: 22.06.2018
|
2 Участники

Область применения: API Graph | Azure Active Directory (AD)Applies to: Graph API | Azure Active Directory (AD)

API Graph для Azure AD позволяет выполнять пакетные операции с сущностями, снижающие количество обращений к серверу.With Azure AD Graph API, you can batch operations on entities to reduce roundtrips to the server.Объединение запросов в пакеты снижает нагрузку на сеть и ускоряет выполнение операций.Batching your requests reduces network overhead, and your operations will complete more quickly.

Важно

Для доступа к ресурсам Azure Active Directory мы настоятельно рекомендуем использовать Microsoft Graph вместо API Azure AD Graph.We strongly recommend that you use Microsoft Graph instead of Azure AD Graph API to access Azure Active Directory resources.Теперь наши усилия сфокусированы на разработке Microsoft Graph; дальнейшее продвижение API Azure AD Graph мы не планируем.Our development efforts are now concentrated on Microsoft Graph and no further enhancements are planned for Azure AD Graph API.Есть очень мало сценариев, в которых по-прежнему можно использовать API Azure AD Graph. Дополнительные сведения об этом см. в записи блога в центре разработчиков Office, где сравниваются решения Microsoft Graph и Azure AD Graph.There are a very limited number of scenarios for which Azure AD Graph API might still be appropriate; for more information, see the Microsoft Graph or the Azure AD Graph blog post in the Office Dev Center.Обратите внимание на то, что в настоящее время Microsoft Graph не поддерживает пакетную обработку; для работы с этой функцией необходимо использовать API Graph Azure AD.Note that batch processing is not currently supported in Microsoft Graph; you will need to use Azure AD Graph API for this feature.

Поддержка пакетных запросов OData в API Graph Graph API support for OData batch requests

Семантика для пакетной обработки сущностей определяется спецификацией пакетной обработки OData 3.0.The semantics for entity batch processing are defined by the OData 3.0 Batch Processing Specification.Спецификация протокола OData определяет следующие понятия для пакетных запросов.The OData specification defines the following concepts for batch requests:

  • Под запросом понимается одиночный запрос или вызов функции.A query is a single query or function invocation.
  • Набор изменений — это группа из одной или нескольких операций вставки, обновления или удаления, вызовов действий или служб.A change set is a group of one or more insert, update, or delete operations, action invocations, or service invocations.
  • Пакет — это контейнер операций, содержащий один или несколько наборов изменений и операций запросов.A batch is a container of operations, including one or more change sets and query operations.

API Graph поддерживает подмножество функциональных возможностей, определенных в спецификации протокола OData.The Graph API supports a subset of the functionality defined by the OData specification:

  • Общее количество запросов и наборов изменений в одном пакете не может превышать пяти.A single batch can contain a maximum of five queries and/or change sets combined.
  • Набор изменений может содержать не более одного изменения исходного объекта и в сумме до 20 операций добавления и удаления ссылки.A change set can contain a maximum of one source object modification and up to 20 add-link and delete-link operations combined.Все операции в наборе изменений должны применяться к одной исходной сущности.All operations in the change set must be on a single source entity.

Пакетные запросы в API Graph Graph API batch requests

В следующих разделах приведены инструкции по созданию пакетных запросов и интерпретации пакетных ответов, а также примеры обеих операций.The following sections describe how to construct a batch request, how to interpret the batch response, and show samples of each.

Синтаксис пакетного запросаBatch request syntax

Для выполнения пакетного запроса задайте параметр $batch в коде URI запроса.To perform a batch request, specify the $batch option on the request URI.Пример.For example:

https://graph.windows.net/contoso.onmicrosoft.com/$batch?api-version=1.6

Пакетный запрос отправляется на сервер в одной директиве POST.A batch request is sent to the server with a single POST directive.

Полезные данные представляют собой сообщение MIME из нескольких частей, содержащее пакет и его составляющие — запросы и наборы изменений.The payload is a multi-part MIME message containing the batch and its constituent queries and change sets.Полезные данные включают в себя границы MIME двух типов.The payload includes two types of MIME boundaries:

  • Граница пакета отделяет каждый запрос и/или набор изменений в пакете.A batch boundary separates each query and/or change set in the batch.
  • Граница набора изменений разделяет отдельные операции в наборе изменений.A change set boundary separates individual operations within a change set.

Отдельный запрос в наборе изменений совпадает с запросом, который выполняется при прямом вызове операции.An individual request within a change set is identical to a request made when that operation is called by itself.Пример.For example:

  • Для назначения формата полезных данных (JSON или ATOM) каждой операции в наборе изменений включите подходящие заголовки Content-Type и при необходимости Accept.To specify the payload format (JSON or ATOM) for each operation in the change set, include the appropriate Content-Type and, if needed, Accept headers.
  • Если при создании сущности требуется запретить вывод на экран содержимого ответа, задайте заголовок Prefer со значением return-no-content для каждой операции вставки в наборе изменений.To suppress the response content echo when creating an entity, specify the Prefer header with the return-no-content value for each insert operation in a change set.

Пример запросаSample request

В следующем примере показан пакетный запрос из пяти элементов.The following example shows a batch request that contains five items:

  1. Набор изменений, который создает пользователя, testuser@contoso.onmicrosoft.com (POST).A change set that creates a user, testuser@contoso.onmicrosoft.com (POST).В эту операцию включен заголовок Prefer: response-no-content для запрета возврата только что созданного пользователя.This operation includes the Prefer: response-no-content header to suppress the newly created user being returned.
  2. Набор изменений, обеспечивающий обновление свойств нового пользователя "Отдел" и "Должность" (PATCH) и назначение его руководителю свойства навигации (PUT).A change set that updates the Department and Job Title properties of the new user (PATCH), and sets its manager navigation property (PUT).
  3. Запрос, возвращающий руководителя нового пользователя (GET).A query for the manager of the new user (GET).
  4. Набор изменений, обеспечивающий удаление нового пользователя (DELETE).A change set that deletes the new user (DELETE).
  5. Запрос, возвращающий пользователя (GET).A query for the user (GET).Эта операция завершится сбоем, поскольку пользователь был удален на предыдущем шаге.This operation will fail because the user was deleted in the previous step.
POST https://graph.windows.net/contoso.onmicrosoft.com/$batch?api-version=1.5 HTTP/1.1
Authorization: Bearer ey … jQA
Content-Type: multipart/mixed; boundary=batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Host: graph.windows.net
Content-Length: 2961

--batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: multipart/mixed; boundary=changeset_77162fcd-b8da-41ac-a9f8-9357efbbd620 
Content-Length: 631       

--changeset_77162fcd-b8da-41ac-a9f8-9357efbbd620 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST /contoso.onmicrosoft.com/users?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 256
Prefer: return-no-content
Host: graph.windows.net

{
    "accountEnabled": true,
    "displayName": "Test User",
    "mailNickname": "testuser",
    "passwordProfile": { "password" : "Test1234", "forceChangePasswordNextLogin": false },
    "userPrincipalName": "testuser@contoso.onmicrosoft.com"
}

--changeset_77162fcd-b8da-41ac-a9f8-9357efbbd620----batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: multipart/mixed; boundary=changeset_4b2cbfb7-011d-4edb-8bbf-e044f9830aaf 
Content-Length: 909

--changeset_4b2cbfb7-011d-4edb-8bbf-e044f9830aaf 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

PATCH /contoso.onmicrosoft.com/users/testuser@contoso.onmicrosoft.com?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 72
Host: graph.windows.net

{
    "department": "Engineering",
    "jobTitle": "Test Engineer"
}

--changeset_4b2cbfb7-011d-4edb-8bbf-e044f9830aaf 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

PUT /contoso.onmicrosoft.com/users/testuser@contoso.onmicrosoft.com/$links/manager?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 112
Host: graph.windows.net

{
  "url":"https://graph.windows.net/contoso.onmicrosoft.com/users/a71e4d1c-ce99-40dc-8d4b-390eac63e039"
}

--changeset_4b2cbfb7-011d-4edb-8bbf-e044f9830aaf----batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: application/http 
Content-Transfer-Encoding:binary

GET /contoso.onmicrosoft.com/users/testuser@contoso.onmicrosoft.com/$links/manager?api-version=1.5 HTTP/1.1
Accept: application/json
Host: graph.windows.net

--batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: multipart/mixed; boundary=changeset_9a0b5878-0f4a-4f57-91c5-9792cdd5ef20 
Content-Length: 331       

--changeset_9a0b5878-0f4a-4f57-91c5-9792cdd5ef20 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

DELETE /contoso.onmicrosoft.com/users/testuser@contoso.onmicrosoft.com?api-version=1.5 HTTP/1.1
Accept: application/json
Host: graph.windows.net


--changeset_9a0b5878-0f4a-4f57-91c5-9792cdd5ef20----batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: application/http 
Content-Transfer-Encoding:binary

GET /contoso.onmicrosoft.com/users/testuser@contoso.onmicrosoft.com?api-version=1.5 HTTP/1.1
Accept: application/json
Host: graph.windows.net

--batch_36522ad7-fc75-4b56-8c71-56071383e77b--

Синтаксис ответа на пакетный запрос Batch response syntax

Ответ содержит код общего состояния пакетного запроса, а также отдельные коды состояния и фрагменты результатов для каждого элемента в пакете.The response returns an overall status code for the batch request, and individual status codes and result fragments for each item in the batch.Ответ представляет собой составное MIME-сообщение, содержащее границу пакета и границу набора изменений.The response is a multi-part MIME message that includes batch boundaries and change set boundaries.

Если пакетный запрос прошел проверку подлинности и успешно принят службами API Graph, он возвращает код состояния 202 Accepted даже в случае сбоя одной из операций в пакете.Assuming that the batch request has been properly authenticated and has been successfully received by the Graph API, the batch request returns status code 202 Accepted, even if one of the operations in the batch fails.Сбой пакетного запроса всегда предшествует выполнению любой операции в пакете.If the batch request itself fails, it fails before any operation in the batch is executed.Например, пакетный запрос может завершиться неудачно из-за ошибки проверки подлинности, в таком случае будет возвращен соответствующий код состояния.For example, the batch request may fail due to an authentication error, in which case the status code will indicate that failure.

Фрагмент ответа для элемента запроса содержит один код состояния, указывающий на успешное выполнение или сбой операции, а также соответствующий текст ответа.The response fragment for a query item contains a single status code that indicates either the success or failure of the operation as well as any response body appropriate.

Операции в наборе изменений обрабатываются нераздельно: это означает, что либо все операции в наборе изменений выполняются успешно, либо происходит сбой набора изменений в целом.The operations in a change set are processed atomically; that is, either all operations in the change set succeed, or the entire change set fails.Обработка операции в наборе изменений службами API Graph продолжается до первого сбоя.The Graph API continues processing operations in the change set until one fails.Сбой одной из операций вызывает откат всех предшествующих операций в наборе изменений.If an operation fails, all preceding operations in the change set are rolled back.

Если все операции в наборе изменений обработаны успешно, в ответ набора изменений включается код состояния (и текст ответа) для каждой операции в наборе изменений.If all operations in a change set are successfully processed, the status code (and response body) for each operation within the change set appears within the change set response.В случае сбоя одной из операций в наборе изменений для этого набора возвращается только один код состояния.If an operation in a change set fails, then only a single status code is returned for the change set.Это код состояния (и текст ответа), возвращаемый сбойной операцией; например 400 — Ошибочный запрос или 404 — Объект не найден.This will be the status code (and response body) returned by the failed operation; for example, 400 Bad Request or 404 Not Found.

Пример ответаSample response

В следующем примере показан ответ для пакетной операции, переданной в приведенном выше примере запроса.The following example shows the response for the batch operation sent in the sample request shown above.Самому пакетному запросу присвоено состояние 202 — Принято.The status for the batch request itself is set to 202 Accepted.Это означает отсутствие неполадок, относящихся к пакетному запросу в целом.This indicates that there no problems with the batch request itself.Ответ на каждый элемент в пакете ограничен идентификатором границы batchresponse, а каждый ответ на операцию в наборе изменений — идентификатором границы changesetresponse.The response to each item in the batch is delimited with the batchresponse boundary identifier and each response to an operation within a change set is delimited with a changesetresponse boundary identifier.

Ниже перечислены фрагменты ответа для каждого элемента пакета.The following lists the response fragments for each batch item:

  1. Запросу POST, обеспечивающему создание нового пользователя, присвоено состояние 204 — Нет содержимого.The status for the POST request to create the new user is set to 204 No Content.Причина состоит в том, что заголовку Prefer в запросе присвоено значение return-no-content.This is because the Prefer header was set to return-no-content in the request.Это означает, что пользователь успешно создан.It indicates that the user was successfully created.
  2. Ответ на второй элемент пакета содержит два ответа 204 — Нет содержимого: для обновления объекта-пользователя (PATCH) и для задания ссылки на руководителя (PUT) в наборе изменений.The response for the second batch item contains two 204 No Content responses, one for the user object update (PATCH) and one for setting the manager link (PUT) in the change set.Это означает, что обе операции выполнены успешно.This indicates that both operations were successful.
  3. Ответ на запрос, обеспечивающий чтение данных о руководителе пользователя, возвращает ссылку на руководителя и состояние 200 — ОК.The response for the request to read the user’s manager, returns the link to the manager and a status of 200 OK.
  4. Состояние попытки удаления пользователя: 204 — Нет содержимого.The status for the attempt to delete the user, is 204 No Content.Это означает, что операция выполнена успешно.This indicates that the operation was successful
  5. Состояние попытки чтения удаленного пользователя: 404 — Объект не найден; ответ содержит код и сообщение о том, что пользователь не найден.The status for the attempt to read the deleted user, is 404 Not Found and the response contains a code and message that indicates that the user (resource) was not found.
HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
Content-Type: multipart/mixed; boundary=batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Expires: -1
Server: Microsoft-IIS/8.5
ocp-aad-diagnostics-server-name: Nv0YIi2YUldDWu0YPQAXsYwXQ4ttyr7ded6Waf8xyCc=
request-id: 2f7d2f81-3441-4c2a-b494-25cd1d6ce624
client-request-id: f40c00af-3e1f-4198-9261-386f0e3aecc6
x-ms-gateway-rewrite: false
x-ms-dirapi-data-contract-version: 1.5
ocp-aad-session-key: cdhenl3mgHuI3vaRRIQ14uXdwRLUqirNpDXjJP42EzUEvqhhn2NFr22ulR4PsqrM1UD_eSUDItt7J9kUQhNvTT_48q90coHHt2RutCIgPNg.lD81Z0iS2SaHbqkfAaDvbbigoX7ak7rfiUGFby0LOIE
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Tue, 20 Jan 2015 23:21:15 GMT
Content-Length: 3065

--batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Content-Type: multipart/mixed; boundary=changesetresponse_8a63ce5e-ed31-4de6-bc90-9d3ff31debbb--changesetresponse_8a63ce5e-ed31-4de6-bc90-9d3ff31debbb
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
Cache-Control: no-cache
Preference-Applied: return-no-content
DataServiceVersion: 3.0;
Location: https://graph.windows.net/contoso.onmicrosoft.com/directoryObjects/6a287a96-ede9-44d2-b685-d6fc03a124c5/Microsoft.DirectoryServices.User
DataServiceId: https://graph.windows.net/contoso.onmicrosoft.com/directoryObjects/6a287a96-ede9-44d2-b685-d6fc03a124c5


--changesetresponse_8a63ce5e-ed31-4de6-bc90-9d3ff31debbb----batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Content-Type: multipart/mixed; boundary=changesetresponse_11ba5cf0-9fba-4995-9f15-bd5c9981cdd6--changesetresponse_11ba5cf0-9fba-4995-9f15-bd5c9981cdd6
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
Cache-Control: no-cache
DataServiceVersion: 1.0;


--changesetresponse_11ba5cf0-9fba-4995-9f15-bd5c9981cdd6
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
Cache-Control: no-cache
DataServiceVersion: 1.0;


--changesetresponse_11ba5cf0-9fba-4995-9f15-bd5c9981cdd6----batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 200 OK
DataServiceVersion: 3.0;
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8
X-Content-Type-Options: nosniff
Cache-Control: no-cache

{
  "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#directoryObjects/$links/manager",
  "url":"https://graph.windows.net/contoso.onmicrosoft.com/directoryObjects/a71e4d1c-ce99-40dc-8d4b-390eac63e039/Microsoft.DirectoryServices.User"
}
--batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Content-Type: multipart/mixed; boundary=changesetresponse_bb215a84-f91e-4486-a771-ba2cc5d429d1--changesetresponse_bb215a84-f91e-4486-a771-ba2cc5d429d1
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
Cache-Control: no-cache
DataServiceVersion: 1.0;


--changesetresponse_bb215a84-f91e-4486-a771-ba2cc5d429d1----batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 404 Not Found
X-Content-Type-Options: nosniff
Cache-Control: no-cache
DataServiceVersion: 3.0;
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8

{
  "odata.error":
    {
      "code":"Request_ResourceNotFound",
      "message":
        {
          "lang":"en",
          "value":"Resource 'testuser@contoso.onmicrosoft.com' does not exist or one of its queried reference-property objects are not present."
        }
    }
}
--batchresponse_1eb70252-25d2-466c-9a1d-7a3f45378b06--

Пример ответа с ошибкойSample error response

Как указано выше, API Graph возвращает код ошибки 202 — Принято для пакета в целом: это означает, что пакет представлен в правильном формате и не содержит ошибок, например ошибки проверки подлинности.As discussed above, the Graph API returns an error code of 202 Accepted for the entire batch if it can accept the batch; that is, if the batch request is well-formed and there are no errors, such as an authentication error.В противном случае API Graph возвращает соответствующее сообщение об ошибке, а пакет не обрабатывается.Otherwise, the Graph API returns the appropriate error and does not process the batch.При сбое отдельного элемента в пакете фрагмент ответа для этого элемента содержит код состояния и текст ответа, указывающий на ошибку.If an individual item within the batch fails then the response fragment for that item will contain a status code and response body that indicates that error.При сбое операции внутри набора изменений для всего этого набора возвращается один фрагмент ответа, который содержит код состояния и текст ответа, связанный со сбойной операцией.When an operation inside a change set fails, a single response fragment will be returned for the entire change set and that fragment will contain the status code and response body associated with the failed operation.

В следующем примере показан ответ на пакетный запрос, содержащий набор изменений, в котором произошел сбой одной из операций.The following example shows a response from batch request that contains a change set in which one of the operations failed.Обратите внимание на то, что ответ на пакет возвращает код состояния 202 — Принято.Note that the batch response returns status code 202 Accepted.Код состояния, возвращенный для набора изменений, указывает на сбой операции с состоянием 404 — Объект не найден.The status code returned for the change set indicates that an operation failed with a status of 404 Not Found.Дополнительные сведения об ошибках включены в текст ответа, относящийся к сбойной операции.Additional error information is included in the response body for the failed operation.Элемент code указывает код ошибки API Graph, а элемент message содержит строку сообщения об ошибке.The code element specifies the Graph API error code and the message element contains the error message string.В этом примере текст ответа показан с отступами для удобства чтения.In this example, the response body has been indented for readability.

HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
Content-Type: multipart/mixed; boundary=batchresponse_3ac28387-a100-4758-8998-8b9ec36f9fdc
Expires: -1
Server: Microsoft-IIS/8.5
ocp-aad-diagnostics-server-name: 1l3fvSoDCV+VKoBCuHRN+HIwCACBOck3dqmtCGj+aiU=
request-id: e434261b-c32f-48b4-b21d-3e1beab6d525
client-request-id: 236bf26e-b4e8-40a4-b6fb-d41105a7b178
x-ms-gateway-rewrite: false
x-ms-dirapi-data-contract-version: 1.5
ocp-aad-session-key: 9aOaAUxX95OZ0ctrYbeLUproN-37GypZXrss0PYKhEfqamKRG-C68hFcCw5h-ZCWFqBrXPrldGEnjq4CKKr0bW91tjrdo-BlwAqHxbP5jq4.FaXtVZni3cSsWFRMSjQAbjiluPcEvZofwp9OH3t1fyk
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Wed, 21 Jan 2015 21:13:25 GMT
Content-Length: 779

--batchresponse_3ac28387-a100-4758-8998-8b9ec36f9fdc
Content-Type: multipart/mixed; boundary=changesetresponse_72ba9a5a-2da3-4d39-ae4f-dd9527efd742--changesetresponse_72ba9a5a-2da3-4d39-ae4f-dd9527efd742
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 404 Not Found
X-Content-Type-Options: nosniff
DataServiceVersion: 3.0;
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8

{
  "odata.error":
    {
      "code":"Request_ResourceNotFound",
      "message":
        {
          "lang":"en",
          "value":"Resource 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee' does not exist or one of its queried reference-property objects are not present."
        }
    }
}
--changesetresponse_72ba9a5a-2da3-4d39-ae4f-dd9527efd742----batchresponse_3ac28387-a100-4758-8998-8b9ec36f9fdc--

Для справки в следующем примере показан пакет, на который сформирован показанный выше ответ.For reference, the following example shows the batch that generated the response above.Он содержит один набор изменений, обеспечивающий добавление трех пользователей к группе.It contains a single change set that adds three users to a group.Двум последним пользователям присвоены вымышленные идентификаторы объектов: eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee и ffffffff-ffff-ffff-ffff-ffffffffffff.The Object IDs for the last two users are fictitious: eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee and ffffffff-ffff-ffff-ffff-ffffffffffff.URL-адрес пакета и соответствующие заголовки запросов для краткости опущены.The batch URL and associated request headers are omitted for brevity.

--batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: multipart/mixed; boundary=changeset_5a769eb2-d1a7-4a10-94f6-d1a5ed5c4bc0 
Content-Length: 1432

--changeset_5a769eb2-d1a7-4a10-94f6-d1a5ed5c4bc0 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST /contoso.onmicrosoft.com/groups/fc15e7ef-993f-4865-bf37-317d9b8017b8/$links/members?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 112
Host: graph.windows.net

{
  "url":"https://graph.windows.net/contoso.onmicrosoft.com/users/a71e4d1c-ce99-40dc-8d4b-390eac63e039"
}

--changeset_5a769eb2-d1a7-4a10-94f6-d1a5ed5c4bc0 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST /contoso.onmicrosoft.com/groups/fc15e7ef-993f-4865-bf37-317d9b8017b8/$links/members?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 112
Host: graph.windows.net

{
  "url":"https://graph.windows.net/contoso.onmicrosoft.com/users/eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee
"
}

--changeset_5a769eb2-d1a7-4a10-94f6-d1a5ed5c4bc0 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST /contoso.onmicrosoft.com/groups/fc15e7ef-993f-4865-bf37-317d9b8017b8/$links/members?api-version=1.5 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 112
Host: graph.windows.net

{
  "url":"https://graph.windows.net/contoso.onmicrosoft.com/users/ffffffff-ffff-ffff-ffff-ffffffffffff"
}

--changeset_5a769eb2-d1a7-4a10-94f6-d1a5ed5c4bc0----batch_36522ad7-fc75-4b56-8c71-56071383e77b--

Дополнительные ресурсы Additional resources

© 2018 Microsoft