I’m glad to see how VMware products are becoming more and more automation-focused these days. NSX has always had rich REST API capabilities, which I can’t complain about. And vSphere is now starting to catch up. vSphere 6.5 was the first release where REST API started getting much more attention. See these official blog posts for example:
- What’s New with Developer and Automation Interfaces for vSphere 6.5?
- Getting Started with the vSphere Automation SDK for REST
- Introducing Developer and Automation Interfaces for vSphere 6.7
But not many people know that vSphere 6.5 wasn’t the first release where REST API became available. Check this forum thread on VMTN “Does vCenter 6.0 support RESTFUL api?”:
I think its only supported for 6.5 as below blogs has a customer asked the same question and reply is no..
It’s not entirely true, even though I know why the OP got a “No” answer. Let me explain.
vSphere 6.0 REST API
VMware started to make first steps towards REST API starting from 6.0 release. If you have a legacy vSphere 6.0 environment you can play with, you can easily test that by opening the following URL:
You will get a long list of commands available in 6.0 release:
It may look impressive, but if you look closely you will quickly notice that they are all Content Library or Tagging related. Quote from the referenced blog post:
VMware vCenter has received some new extensions to its REST based API. In vSphere 6.0, this API set provides the ability to manage the Content Library and Tagging but now also includes the ability to manage and configure the vCenter Server Appliance (VCSA) based functionality and basic VM management.
That is right, in vSphere 6.0 REST API is very limited, you won’t get inventory data, backup or update API. All you can do is manage Content Library and Tagging, which, frankly, is not very practical.
Making REST API Calls
If Content Library and Tagging use cases are applicable to you or you are just feeling adventurous this is an example of how you can make a call to vSphere 6.0 REST API via Postman.
All calls are POST-based and action (get, list, create, etc.) is specified as a parameter, so pay close attention to request format.
First you will need to generate authentication token by making a POST call to https://vcenter/rest/com/vmware/cis/session, using “Basic Auth” for Authorization and you will get a token in response:
Then change Authorization to “No auth” and specify the token in “vmware-api-session-id” header in your next call. In this example I’m getting a list of all content libraries (you will obviously get an empty response if you haven’t actually created one):
Some commands require a body, to determine the body format use the following POST call to https://vcenter/rest/com/vmware/vapi/metadata/cli/command?~action=get, with the following body in JSON format:
{ "identity": { "name": "get", "path": "com.vmware.content.library" } }
Where “path” is the operation and “name” is the action from the https://vcenter/rest/com/vmware/vapi/metadata/cli/command call above.
If you’re looking for more detailed information, I found this blog post by Mitch Tulloch very useful:
Conclusion
There you have it. vSphere 6.0 does support REST API, it’s just not very useful, that’s why no one talks about it.
This blog post won’t help you if you are stuck in a stone age and need to manage vSphere 6.0 via REST API, but it at least gives you a definitive answer of whether REST API is supported in vSphere 6.0 and what you can do with it.
If you do find yourself in such situation, I recommend to fall back on PowerCLI, if possible.
Tags: API, APIs, authentication, authorization, Automation, POST, PowerCLI, powershell, REST, RESTful, token, vCenter, vmware, vmware-api-session-id, vSphere
January 8, 2020 at 9:40 am |
What browser and REST extension do you use on your screenshots?
February 4, 2020 at 3:47 am |
Hi Vladimir, it’s not a browser extension. It’s Postman, which is a standalone app. They used to have a browser extension as well, but it’s now deprecated.