PS PowerShell  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

REST и JSON

REST и JSON: практический тест по PowerShell с чтением кода, поиском причины ошибки и выбором надёжного решения. Темы: Запросы через Invoke-RestMethod, Заголовки, Данные в формате JSON, Обработка статусов, Диагностика: HTTP и JSON, Безопасная эксплуатация: HTTP и JSON. Базовая линия — PowerShell 7.6.3; Windows-зависимые команды и отличия Windows PowerShell 5.1 отмечены в условиях.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
GET-ответ JSON автоматически превращается в объекты. Как исправить причину, а не только симптом?
PowerShellGET-ответ JSON автоматически превращается в объекты
$data=Invoke-RestMethod -Uri https://api.example.test/items -Method Get -TimeoutSec 20
$data | Select-Object -First 1
Вопрос 2 из 30
Тело POST строится из PSCustomObject. Где заканчивается гарантия этого механизма?
PowerShellТело POST строится из PSCustomObject
$body=[pscustomobject]@{name="alpha";tags=@("a","b")} | ConvertTo-Json -Depth 4
Invoke-RestMethod $uri -Method Post -ContentType "application/json" -Body $body
Вопрос 3 из 30
Пагинация следует ссылке next. Где заканчивается гарантия этого механизма?
PowerShellПагинация следует ссылке next
$result = & { do{$r=Invoke-RestMethod $uri;$r.items;$uri=$r.next}while($uri) }
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 4 из 30
API возвращает 204 No Content. На каком правиле основан результат?
Вопрос 5 из 30
URI собирается строковой конкатенацией параметров. Какой вариант точнее выражает контракт?
Вопрос 6 из 30
Bearer-токен передаётся в Authorization. Как PowerShell обработает этот случай?
PowerShellBearer-токен передаётся в Authorization
$headers=@{Authorization="Bearer $token";Accept="application/json"}
Invoke-RestMethod $uri -Headers $headers
Вопрос 7 из 30
If-Match используется с ETag. Какой принцип PowerShell здесь работает?
PowerShellIf-Match используется с ETag
$headers=@{"If-Match"=$etag}
Invoke-RestMethod $uri -Method Patch -Headers $headers -Body $body -ContentType application/json
Вопрос 8 из 30
Retry-After приходит числом или HTTP-датой. Какое скрытое допущение делает решение ненадёжным?
PowerShellRetry-After приходит числом или HTTP-датой
$retry=$response.Headers["Retry-After"]
$valueType = if($null -eq $retry){'<null>'}else{$retry.GetType().FullName}
[pscustomobject]@{ Value=$retry; Type=$valueType; Count=@($retry).Count }
Вопрос 9 из 30
Content-Type и Accept считаются взаимозаменяемыми. На каком правиле основан результат?
Вопрос 10 из 30
Пользовательские заголовки копируются в следующий домен при redirect. Какой вывод был бы слишком сильным?
Вопрос 11 из 30
Число идентификатора превышает точность JavaScript-клиента. Что следует сделать до запуска в автоматизации?
PowerShellЧисло идентификатора превышает точность JavaScript-клиента
$result = [pscustomobject]@{id="9223372036854775807"} | ConvertTo-Json -Compress
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 12 из 30
Объект содержит циклические ссылки. Что остаётся непроверенным после успешного запуска?
PowerShellОбъект содержит циклические ссылки
$a=[pscustomobject]@{Name="a"};$a|Add-Member NoteProperty Self $a
$a|ConvertTo-Json -Depth 5
Вопрос 13 из 30
Поля null и отсутствующее поле имеют разный смысл. Какое объяснение не зависит от случайностей окружения?
PowerShellПоля null и отсутствующее поле имеют разный смысл
$result = & { [pscustomobject]@{name="x";description=$null}|ConvertTo-Json }
$summary = [ordered]@{ IsNull=($null -eq $result); Count=@($result).Count }
if($null -ne $result){$summary.Type=$result.GetType().FullName};[pscustomobject]$summary
Вопрос 14 из 30
Порядок свойств используется как подпись. Какое утверждение верно для этого случая?
Вопрос 15 из 30
ConvertFrom-Json получает недоверенное огромное тело. Что остаётся непроверенным после успешного запуска?
Вопрос 16 из 30
429 и 503 обрабатываются повтором. Какое объяснение не зависит от случайностей окружения?
PowerShell429 и 503 обрабатываются повтором
foreach($attempt in 1..4){
  try { return Invoke-RestMethod -Uri $uri -ErrorAction Stop }
  catch {
    $status = [int]$_.Exception.Response.StatusCode
    if($status -notin 429,503 -or $attempt -eq 4){ throw }
    $retryAfter = $_.Exception.Response.Headers.RetryAfter.Delta.TotalSeconds
    Start-Sleep -Seconds ([math]::Max($retryAfter,[math]::Pow(2,$attempt)))
  }
}
Вопрос 17 из 30
POST без ключа идемпотентности повторяется после тайм-аута. Какое объяснение не зависит от случайностей окружения?
PowerShellPOST без ключа идемпотентности повторяется после тайм-аута
$headers=@{"Idempotency-Key"=$operationId}
$valueType = if($null -eq $headers){'<null>'}else{$headers.GetType().FullName}
[pscustomobject]@{ Value=$headers; Type=$valueType; Count=@($headers).Count }
Вопрос 18 из 30
404 для чтения и удаления трактуется одинаково. Какая граница важна для автоматизации?
PowerShell404 для чтения и удаления трактуется одинаково
# Сценарий для ревью: 404 для чтения и удаления трактуется одинаково.
$operationId = [guid]::NewGuid().ToString('N')
$headers = @{ 'Idempotency-Key'=$operationId; Authorization="Bearer $env:API_TOKEN" }
foreach($attempt in 1..3){
  try { Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $body -TimeoutSec 5 -ErrorAction Stop; break }
  catch { if($attempt -eq 3){ throw }; Start-Sleep -Seconds $attempt }
}
Вопрос 19 из 30
401 автоматически повторяется много раз. Что стоит изменить в первую очередь?
Вопрос 20 из 30
Ответ 200 содержит объект ошибки в теле. Как следует читать этот фрагмент?
Вопрос 21 из 30
Клиент падает только на части ответов. Как исправить причину, а не только симптом?
PowerShellКлиент падает только на части ответов
$r=Invoke-WebRequest $uri -SkipHttpErrorCheck
[pscustomobject]@{Status=$r.StatusCode;Type=$r.Headers["Content-Type"];Length=$r.RawContentLength}
Вопрос 22 из 30
JSON теряет вложенные поля. Какая граница между этими средствами важна?
PowerShellJSON теряет вложенные поля
$json=$dto|ConvertTo-Json -Depth 10;$back=$json|ConvertFrom-Json
$valueType = if($null -eq $json){'<null>'}else{$json.GetType().FullName}
[pscustomobject]@{ Value=$json; Type=$valueType; Count=@($json).Count }
Вопрос 23 из 30
Повторный запрос создаёт дубли. Какой принцип PowerShell здесь работает?
PowerShellПовторный запрос создаёт дубли
# Сценарий для ревью: Повторный запрос создаёт дубли.
$operationId = [guid]::NewGuid().ToString('N')
$headers = @{ 'Idempotency-Key'=$operationId; Authorization="Bearer $env:API_TOKEN" }
foreach($attempt in 1..3){
  try { Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $body -TimeoutSec 5 -ErrorAction Stop; break }
  catch { if($attempt -eq 3){ throw }; Start-Sleep -Seconds $attempt }
}
Вопрос 24 из 30
Пагинация зациклилась. Какое объяснение не зависит от случайностей окружения?
Вопрос 25 из 30
Производительность ухудшилась. Какое действие не создаст новой скрытой зависимости?
Вопрос 26 из 30
Токен попал в журнал запроса. Какой вывод можно подтвердить?
PowerShellТокен попал в журнал запроса
$safeHeaders=@{};$headers.Keys|ForEach-Object{$safeHeaders[$_]=if($_ -match "Authorization|Cookie|Key"){"[REDACTED]"}else{$headers[$_]}}
Вопрос 27 из 30
Клиент принимает любой сертификат. Какое утверждение верно для этого случая?
PowerShellКлиент принимает любой сертификат
# Сценарий для ревью: Клиент принимает любой сертификат.
$policy = Get-ExecutionPolicy -List
$signature = Get-AuthenticodeSignature -FilePath .\deploy.ps1
[pscustomobject]@{ Policy=$policy; Status=$signature.Status; Signer=$signature.SignerCertificate.Subject }
if($signature.Status -eq 'Valid'){ & .\deploy.ps1 }
Вопрос 28 из 30
URI для запроса приходит от пользователя. Почему локальный успех ещё ничего не доказывает?
PowerShellURI для запроса приходит от пользователя
# Сценарий для ревью: URI для запроса приходит от пользователя.
$operationId = [guid]::NewGuid().ToString('N')
$headers = @{ 'Idempotency-Key'=$operationId; Authorization="Bearer $env:API_TOKEN" }
foreach($attempt in 1..3){
  try { Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $body -TimeoutSec 5 -ErrorAction Stop; break }
  catch { if($attempt -eq 3){ throw }; Start-Sleep -Seconds $attempt }
}
Вопрос 29 из 30
Ответ API напрямую используется как команда или путь. Какое объяснение точнее?
Вопрос 30 из 30
Секрет хранится в JSON-конфигурации рядом со сценарием. На каком правиле основан результат?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу