The REST API asynchronous publishing operation introduced in REST API version 3.0 (with Tableau Server 2018.1) is polled via the Query Job function but this can only identify when the job has finished, not whether the publish operation itself actually succeeded or failed and also without providing any diagnostic error detail.
For example, let's say embedded within a workbook I am trying to publish there's a problem with a data source connection (e.g. wrong password):
- when I try to publish using tabcmd, the operation fails and tabcmd returns an ODBC error message indicating login failed - this points the user directly to the root cause
- when I try to publish using REST API synchronous publishing method (&asJob=false), the publish API call returns a 400 Bad Request error with no further details - at least it indicates to the user something went wrong, even if no specific error information is included for further diagnosis
- when I try to publish using REST API asynchronous publishing method (&asJob=true), the QueryJob API call returns progress=100 and finishCode=0 even if the publish operation itself failed due to the same ODBC error, the user is never told of an error and the workbook simply never makes it into the library.
Publishing with tabcmd supplies meaningful feedback including error root cause (I have Wireshark traces to prove it does via an undocumented XML-based API) so it seems paradoxical that the documented REST API does not provide the same. This oversight in the REST API implementation makes the asynchronous publishing operation unreliable/ineffective in its current state.
I would love for this to be resolved/enhanced so that publish success/fail status and diagnostic detail (for example, if specific data source error, ODBC error string) is included in:
1) the Query Job finished job XML response for an asynchronous publish, and
2) the Workbook Publish XML response for a synchronous publish (or simply deprecate the latter entirely).