You can issue MQ commands using the REST API vai the mqweb server, for example with python or curl. The problem I had was trying to remember the syntax of the commands. You can access this information from your program by using the “swagger” interface. You can can access it from a browser (easiest), or from a REST request (for the experts).
I found it useful to use a curl query logon request to check the validity of the certificates I was using. I could use the –trace curl.trace.txt to capture the data flows. If this worked, problems were likely to be in the browser set up, rather than the certificate set up.
Note: Swagger is the name of a protocol, not an acronym.
You need to configure mqweb to use Swagger.
<featureManager> <feature>apiDiscovery-1.0</feature> </featureManager>
Then use a request like (for certificate authentication)
curl -i https://localhost:9443/ibm/api/docs –cacert cacert.pem –cert colinpaice.pem:password –key colinpaice.key.pem > swagger.out
where (note the ‘–‘ may be double – – )
- curl – issue the command
- -i – include the http headers in the response. This is the same flag as –include
- https://localhost:9443/ibm/api/docs – this url
- –cacert cacert.pem – use this CA certificate
- –cert colinpaice.pem:password – use this user certificate
- –key colinpaice.key.pem – use this user private key
- > swagger.out – write the output to this file
If you are using self signed you should use the –insecure option otherwise you get
curl: (60) SSL certificate problem: self signed certificate in certificate chain More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
If you try to userid and password you get
- curl – issue the command
- -i
- https://localhost:9443/ibm/api/docs
- –user colinpaice:password – the userid and password
- -k
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:9443
The swagger output
The output contains
{ "swagger" : "2.0", "info" : { "description" : "Discover REST APIs available within Liberty", "version" : "1.0.0", "title" : "Liberty REST APIs" }, "host" : "localhost:9443", "tags" : [ { ... "name" : "qmgr" ... "name" : "login" ... "name" : "API Discovery", "description" : "APIs available from the API Discovery feature" } ], ...
We can see there is a login command. You have to search the json for the data with “tags” : [“login”].
The section for login has
"/ibmmq/rest/v1/login" : { "get" : { "tags" : [ "login" ], "summary" : "Queries the authenticated user and their roles.", "description" : "Retrieves details of the authenticated user and their roles.", "operationId" : "getLogin", "produces" : [ "application/json; charset=utf-8" ], "parameters" : [ ], "responses" : { "200" : { "description" : "A JSONArray that contains JSONObjects that describe the authenticated user.", "schema" : { "$ref" : "#/definitions/UserAttributePojo" } }, ...
“get”
Within the partial url /ibmmq/rest/v1/login are sections “get”, “post”, and “delete”:
- “get” – Queries the authenticated user and their roles – as the “summary” tag says
- “post” – Authenticates a user and returns an authentication token.
- “delete” – Deletes the authentication token of the logged in user.
You need to pick the section for what you want to do within “get”, “post”, “delete”
“tags” : [ “login” ]
This is for the request.
“200”
This is one of the list of return codes from the http request, and the data each returns.
This returns data as defined in the schema, “$ref” : “#/definitions/UserAttributePojo” . Look in the rest of the document for this section called definitions, with UserAttributePojo underneath.
“definitions”: UserAttributePojo
"definitions" : { ... "UserAttributePojo" : { "type" : "object", "required" : [ "name", "role" ], "properties" : { "name" : { "type" : "string" }, "role" : { "type" : "array", "items" : { "type" : "string" } } }
Two strings will be returned, name and role.
Issue the command
From the data in the swagger output, we can see “host” : “localhost:9443” and “/ibmmq/rest/v1/login” : { “get” : {
build the command
https://localhost:9443/ibmmq/rest/v1/login –request get
my command is now
curl -i https://localhost:9443/ibmmq/rest/v1/login –cacert cacert.pem –cert colinpaice.pem:password –key colinpaice.key.pem –trace trace.txt –request get
note: -request get is inferred and can be allowed to default.
and it returns
{"user": [{ "name": "colinpaice", "role": [ "MQWebAdmin", "MQWebAdminRO", "MQWebUser" ] }]}
If you want to pass data with quotes in it – for example json data. Create a file, and use that
for example
curl -i … –request post -H “Content-Type: application/json” -d @curl.json.txt
or use
-d "{\"param\":\"value\"}"
which is not so easy.