Functions/ApiManager.ps1

# API Manager API
class ApiManager {

    static [string] $BasePath = "/apimanager/api/v1"

    static [string] Organizations($organizationId) {
        return [ApiManager]::BasePath + "/organizations/$organizationId"
    }

    static [string] Environments($organizationId, $environmentsId) {
        return [ApiManager]::BasePath + "/organizations/$organizationId/environments/$environmentsId"
    }

    static [string] Apis($organizationId, $environmentsId) {
        return [ApiManager]::Environments($organizationId, $environmentsId) + "/apis"
    }

    static [string] Policies($organizationId, $environmentsId, $environmentApiId) {
        return [ApiManager]::Environments($organizationId, $environmentsId) + "/apis/$environmentApiId/policies"
    }

    static [string] Alerts($organizationId, $environmentsId, $environmentApiId) {
        return [ApiManager]::Environments($organizationId, $environmentsId) + "/apis/$environmentApiId/alerts"
    }
}

function Get-Api {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)][string] $AssetId,
        [Parameter(Mandatory = $false)][string] $AutodiscoveryApiName,
        [Parameter(Mandatory = $false)][string] $AutodiscoveryInstanceName,
        [Parameter(Mandatory = $false)][guid] $EnvironmentId = $Script:Context.Environment.id,
        [Parameter(Mandatory = $false)][guid] $OrganizationId = $Script:Context.BusinessGroup.id
    )

    process {
        $params = @{
            assetId                   = $AssetId;
            autodiscoveryApiName      = $AutodiscoveryApiName;
            autodiscoveryInstanceName = $AutodiscoveryInstanceName;
        }
        $Script:Client.Get([ApiManager]::Apis($OrganizationId, $EnvironmentId), $params) | Expand-Property -propertyName "assets"
    }
}

function Get-ApiInstance {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)][int] $ApiInstanceId,
        [Parameter(Mandatory = $false)][guid] $EnvironmentId = $Script:Context.Environment.id,
        [Parameter(Mandatory = $false)][guid] $OrganizationId = $Script:Context.BusinessGroup.id
    )

    process {
        $Script:Client.Get([ApiManager]::Apis($OrganizationId, $EnvironmentId) + "/$ApiInstanceId")
    }
}

function Get-ApiPolicy {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)][int] $ApiInstanceId,
        [Parameter(Mandatory = $false)][guid] $EnvironmentId = $Script:Context.Environment.id,
        [Parameter(Mandatory = $false)][guid] $OrganizationId = $Script:Context.BusinessGroup.id
    )

    process {
        $Script:Client.Get([ApiManager]::Policies($OrganizationId, $EnvironmentId, $ApiInstanceId)) | Expand-Property -propertyName "policies"
    }
}

function Get-ApiAlert {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)][int] $ApiInstanceId,
        [Parameter(Mandatory = $false)][guid] $AlertId,
        [Parameter(Mandatory = $false)][guid] $EnvironmentId = $Script:Context.Environment.id,
        [Parameter(Mandatory = $false)][guid] $OrganizationId = $Script:Context.BusinessGroup.id
    )

    process {
        $Script:Client.Get([ApiManager]::Alerts($OrganizationId, $EnvironmentId, $ApiInstanceId) + "/$AlertId")
    }
}

function Update-ApiAlert {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(Mandatory = $true)][int] $ApiInstanceId,
        [Parameter(Mandatory = $true)][guid] $AlertId,
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)][object] $InputObject,
        [Parameter(Mandatory = $false)][guid] $EnvironmentId = $Script:Context.Environment.id,
        [Parameter(Mandatory = $false)][guid] $OrganizationId = $Script:Context.BusinessGroup.id
    )

    process {
        $url = [ApiManager]::Alerts($OrganizationId, $EnvironmentId, $ApiInstanceId) + "/$AlertId"
        if ($PSCmdlet.ShouldProcess((FormatUrlAndBody $url $InputObject), "Put")) {
            $Script:Client.Patch($url, $InputObject)
        }
    }
}


Export-ModuleMember -Function `
    Get-Api, `
    Get-ApiInstance, `
    Get-ApiPolicy, `
    Get-ApiAlert, Update-ApiAlert