private/Invoke-GApi.ps1

Function Invoke-GApi
{
    [CmdletBinding(DefaultParameterSetName="Uri")]
    param(
        [Parameter(Mandatory, ParameterSetName="Uri")]
        [Parameter(Mandatory, ParameterSetName="Body")]
        [Parameter(Mandatory, ParameterSetName="InFile")]
        [string]$uri,

        [Parameter(ParameterSetName="Body")]
        [string]$body,

        [Parameter(ParameterSetName="InFile")]
        [string]$InFile,

        [Parameter(ParameterSetName="Uri")]
        [Parameter(ParameterSetName="Body")]
        [Parameter(ParameterSetName="InFile")]
        [ValidateSet("GET", "POST", "PUT", "PATCH","DELETE")]
        [string]$method = "GET",

        [Parameter(ParameterSetName="Uri")]
        [Parameter(ParameterSetName="Body")]
        [Parameter(ParameterSetName="InFile")]
        [string]$ContentType = "application/json",

        [Parameter(ParameterSetName="Uri")]
        [Parameter(ParameterSetName="Body")]
        [Parameter(ParameterSetName="InFile")]
        [hashtable]$AdditionalHeaders = @{}
    )

    # obtain the auth-header
    $headers = Get-AuthHeader

    # Add any additional headers
    foreach ($key in $AdditionalHeaders.Keys) {
        $headers[$key] = $AdditionalHeaders[$key]
    }

    $invokeArgs = @{
        Uri = $uri
        Method = $method
        ContentType = $ContentType
        Headers = $headers
    }

    if ($body) {
        if ($method -eq "GET") {
            $invokeArgs.Method = "POST"
        }
        $invokeArgs.Body = $body
    }
    if ($InFile) {
        $invokeArgs.InFile = $InFile
    }


    Invoke-RestMethod @invokeArgs
}