PowerShell is a great language to query REST APIs. When I call a REST API, I usually expect things to go well, but sometimes it doesn’t. So, how should I handle HTTP errors like 404, 403, and so on?
When invoking REST API methods, I use PowerShell’s ‘Invoke-RestMethod‘ cmdlet.
When I call a REST method with ‘Invoke-RestMethod,’ it returns a string containing the content returned by the REST method.
If the REST method returns a valid result, everything is okay. If the REST method returns an error, then ‘Invoke-RestMethod‘ returns nothing.
So, how do we inspect HTTP errors with ‘Invoke-RestMethod‘? There are two ways to do this: either through the ‘ErrorVariable’ or using the ‘SkipErrorCheck’ parameter.
I will explain the two approaches in this blog post.
The following code calls a REST method that returns HTTP error 404. The ‘ErrorVariable‘ parameter stores the error object in a variable called ‘myerror.’
We can then use the ‘myerror‘ to get things like the status code, request headers, and response headers.
Invoke-RestMethod https://rasmusg.net/http404 -ErrorVariable myerror # Get HTTP status code (enum HttpStatusCode): # Status code name: $myerror.ErrorRecord.Exception.Response.StatusCode # Status code number [int]$myerror.ErrorRecord.Exception.Response.StatusCode # Get response headers $myerror.ErrorRecord.Exception.Response.Headers # Get request message $myerror.ErrorRecord.Exception.Response.RequestMessage
The following code shows the use of the ‘SkipErrorCheck‘ parameter. Using this parameter, ‘Invoke-RestMethod’ will not check for any HTTP errors and return the response regardless. If you use this approach, it is good to use the ‘StatusCodeVariable’ and ‘HeadersVariable’ to store status code and header info, respectively. This way, you can validate status code and inspect response headers (e.g., to inspect an API Management request trace).
$response = Invoke-RestMethod https://rasmusg.net/error404 -ErrorVariable myerror -StatusCodeVariable mystatus -ResponseHeadersVariable myheaders -SkipHttpErrorCheck
This blog post shows you how to invoke REST API methods and retrieve error information.
It is also possible to implement the actual REST API using PowerShell. Check out my blog post about How to create a PowerShell Azure Function to see how you can use PowerShell to implement a REST API through Azure Functions.
Thanks for reading, and feel free to post a comment!
9BUILD 2021 NEWS: “Native support for WebSocket APIs in Azure API Management”
The API Management Landscape in 2020
Debug API Management policies in real time
How to get a ‘Request Trace’ in Azure API Management
Open API Specification 3 support in Azure API Management is now GA (generally available)