Give Me an API or Give Me Death
The product is worthless without an API...
There is no reason modern software should not have an API. Unless you have no customers.
Try Automating Through a GUI
First and foremost, automation through a GUI is a difficult task that I would not want to take on.
There are two ways:
A low-code/no-code tool (Power/Logic apps, Flow Designer, etc.)
“Web scraping” (Selenium, Playwright, etc.)
Unfortunately, I have spent my fair share of time in Logic Apps and especially Flow Designer. Though the way I use these tools ties into one of the later points of this blog. Low code tools provide a fair level of abstraction to automate workflows and build “apps” for end users. If you know how to code at all, these tools can be both simple and frustrating.
By web-scraping, I mean writing code to automate the buttons you click, forms you fill out, etc. through a GUI. This is always a terrible idea. Especially if you didn’t write the interface you are automating. The Rabbit R1 had an “AI assistant” that could order DoorDash for you. In reality, it was just a garble of playwright scripts that broke almost immediately because the UI changed. Another example is in my last blog post about automating backing up my Unifi network (because their API doesn’t have this offering). If/when the Unifi updates its GUI, my app breaks. This creates complexity in automation because I have to go back and make changes every release. What changes more often, UIs or API specifications?
Working With Systems Programmatically is the Only Way
Look, some things are done via a GUI that can’t be done via an API. That is not what this blog post is about. Some processes are best not automated and some cannot be automated at all. But in my life, after I have done the same thing three times, I am wondering how it can be automated. How will you export a table of your servers in a certain region in Azure in 15 seconds without an API? Imagine if AWS had no API. How useful would their product be? Yes, there is still a GUI, but once it’s time to scale past 10 VMs and 3 total services the platform would begin to fall on its face. There would be Terraform, CloudFormation, and Crossplane, the AWS Ansible collection would not work, and the list could go on and on. Infrastructure as code is built entirely on top of having this API. This ties into my next point…
Creating More Abstractions for End Users
Terraform is an abstraction that allows end users such as myself to define infrastructure in a standardized fashion and deploy it quickly. Its own “language” is built on top of major cloud provider’s APIs. In my work, I’m able to create my own abstractions on top of Azure’s API, the VxRail API, the Graph API, ServiceNow’s API, and more. This allows me to create something like a form in the service catalog, where users can request X, and input different values depending on their needs (hence, my own abstraction), which kicks off a flow in flow designer that has a REST step to reach out to an Azure function that I wrote (another abstraction) which expects the input values, parses, and takes actions based on those values. In 3 minutes, the user has Y.
Integrate With Something Else Without an API
When creating abstractions, you have to work with multiple systems/tools. AWX and W, Kubernetes and X, Azure and Y, vCenter and Z. This is all made possible by what? I bet you can answer that question by now. This is just my world. But in reality, the internet, your phone, and most applications are being held up by these programmatic middlemen (and SQLite).
TL;DR
Automation is difficult and somewhat pointless when done through a GUI, don’t even tell me anything about Selenium or Playwright. Though some things are better not done programmatically, there are plenty of processes that are unlikely to be efficient if not done via an API. Try out your favorite hyperscaler without API, and try out your favorite infrastructure as code tool on said hyperscaler without them having an API. Oh wait, that’s not possible. Tools like that and many more internal to companies can be created as a result of such products and services offering an API. If your product doesn’t have an API you probably hate your users.


