Как отправить BatchRequest в Google API с помощью PowerShell - PullRequest
0 голосов
/ 26 октября 2019

Я работаю с Google API, чтобы автоматизировать задачи для групп рассылки. Я понимаю, как отправлять отдельные запросы, но я хочу иметь возможность отправлять BatchRequests, и это кажется сложной задачей, так как формат не согласован, как, например, для всех JSON, поэтому я могу преобразовать тело один раз и сделать свой запрос. Я читаю документацию от Google и не могу понять, как этого добиться с помощью Powershell. https://developers.google.com/admin-sdk/directory/v1/guides/batch

Я вижу, что для этого уже есть библиотека .NET, но я пытаюсь понять, как ее использовать. https://googleapis.dev/dotnet/Google.Apis/latest/api/Google.Apis.Requests.BatchRequest.html

Я не могу понять, как я могу сделать вложенный HTTP-запрос внутри HTTP-запроса с PowerShell. Я понятия не имею, как я могу даже написать это, так что вот черновик, который я обдумываю, и я буду редактировать всюду по этому сообщению.

$batchUrl = 'https://www.googleapis.com/batch/admin/directory_v1'

$header = @{
    "Content-type"  = "multipart/mixed; boundary=batch_test"
    "Authorization" = "Bearer <token>"
}

$psBody = [ordered] @{
    method = "POST /admin/directory/v1/groups/vtest@gs.vasil.com/members"
    "content-type" = "application/json"
    email = "vas@gs.vasil.com"
    role = "MEMBER"
}

$JSONbody = $psBody | ConvertTo-Json

Invoke-RestMethod -Uri $batchUrl -Method POST -Headers $header -Body $JSONbody

Я действительно хочу понять, что структура OData, любаядокументация / руководство ссылки приветствуются.

1 Ответ

0 голосов
/ 04 ноября 2019

Я понял это, необходимый формат был буквально тем, что опубликовал Google, поэтому мне просто пришлось настроить тело в соответствии с тем, что я хочу. Пример, приведенный ниже, это просто «Доказательство концепции», и ему потребуются некоторые функции для автоматизации заполнения массива.

$URL = 'https://www.googleapis.com/batch/admin/directory_v1'

$boundary = [System.Guid]::NewGuid().ToString();
$LF = "`r`n";

$header = @{
    "Content-type"  = "multipart/mixed; boundary=$boundary"
    "Authorization" = "Bearer <token>"
}

$request1 = [pscustomobject][ordered]@{
    email = "vas1@gs.vasil.com"
    role  = "MEMBER"
} | ConvertTo-Json

$request2 = [pscustomobject][ordered]@{
    email = "vas2@gs.vasil.com"
    role  = "MEMBER"
} | ConvertTo-Json

$nestedBody = (
    "--$boundary",
    "Content-Type: application/http$LF",
    "POST /admin/directory/v1/groups/vtest@gs.vasil.com/members",
    "Content-Type: application/json$LF",
    "$($request1)$LF",
    "--$boundary--",
    "Content-Type: application/http$LF",
    "POST /admin/directory/v1/groups/vtest@gs.vasil.com/members",
    "Content-Type: application/json$LF",
    "$($request2)$LF",
    "--$boundary--"
) -join $LF

$sendRequest = @{
    Uri         = $URL
    header      =  $header
    Method      = "Post"
    Body        = $nestedBody
}

Invoke-RestMethod @sendRequest

Я пришел к таким выводам, установив прокси Fiddler и посмотрев, как мой запроскак на практике, смотрите скриншот ниже.

enter image description here

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