Private/Invoke-PSAOAIApiRequest.ps1
# This function makes an API request and stores the response function Invoke-PSAOAIApiRequest { <# .SYNOPSIS Sends a POST request to the specified API and stores the response. .DESCRIPTION The Invoke-ApiRequest function sends a POST request to the API specified by the url parameter. It uses the provided headers and bodyJSON for the request. If the request is successful, it returns the response. If an error occurs during the request, it handles the error and returns null. .PARAMETER url Specifies the URL for the API request. This parameter is mandatory. .PARAMETER headers Specifies the headers for the API request. This parameter is mandatory. .PARAMETER bodyJSON Specifies the body for the API request. This parameter is mandatory. .EXAMPLE Invoke-ApiRequest -url $url -headers $headers -bodyJSON $bodyJSON .OUTPUTS If successful, it outputs the response from the API request. If an error occurs, it outputs null. #> param( [Parameter(Mandatory = $true)] [string]$url, # The URL for the API request [Parameter(Mandatory = $true)] [hashtable]$headers, # The headers for the API request [Parameter(Mandatory = $true)] [string]$bodyJSON, # The body for the API request [Parameter(Mandatory = $false)] $timeout = 60 ) # Try to send the API request and handle any errors try { # Start a new job to send the API request $response = Start-Job -ScriptBlock { param($url, $headers, $bodyJSON, $timeout) # Send the API request Invoke-RestMethod -Uri $url -Method POST -Headers $headers -Body $bodyJSON -TimeoutSec $timeout -ErrorAction Stop } -ArgumentList $url, $headers, $bodyJSON, $timeout # Write verbose output for the job Write-Verbose ("Job: $($response | ConvertTo-Json)" ) # Wait for the job to finish while (($response.JobStateInfo.State -eq 'Running') -or ($response.JobStateInfo.State -eq 'NotStarted')) { Write-Host "." -NoNewline -ForegroundColor Blue Start-Sleep -Milliseconds 1000 } Write-Host "" # If the job failed, write the error message if ($response.JobStateInfo.State -eq 'Failed') { Write-Warning $($response.ChildJobs[0].JobStateInfo.Reason.message) return } # Receive the job result $response = Receive-Job -Id $response.Id -Wait -ErrorAction Stop # Write verbose output for the response Write-Verbose ($response | Out-String) # Return the response return $response Write-Host "" } # Catch any errors and write a warning catch { Write-Warning ($_.Exception.Message) } } |