So basically, there are two types of web APIs: synchronous and asynchronous. Synchronous APIs return data instantaneously, providing a way to fetch data on an immediate or scheduled basis. Whenever you call a synchronous API, it is blocked until the server returns a response. The application that requested the data waits for the API to produce a response.
While in asynchronous APIs, a callback function is executed when a response is returned from the API. The API call doesn’t block the application, and the application doesn’t wait for the API to return the response — thus, it continues to execute other functionalities. These APIs are helpful for those applications which have to load other components that are not dependent on the API.
What Is AsyncAPI?
AsyncAPI is an API definition backed by an open-source initiative to define event-driven, asynchronous APIs. As OpenAPI defines the details of a REST API, AsyncAPI defines the intricacies of an asynchronous API. The AsyncAPI specifications are inspired by OpenAPI (formerly known as Swagger) specifications and describe and document the event-driven asynchronous API in a machine-readable form.
For example, when you’re using WebSockets or when two different services talk to each other through a message broker, you can’t use synchronous APIs here because there needs to be a bidirectional flow of data, which does not communicate over HTTP. This is known as a full-duplex system where the client and the server are connected with each other in a persistent manner. The client doesn’t need to ping the server again and again to get the new data. Whenever data is pushed to the server, it automatically sends it to the client.
This is where AsyncAPI comes into play, since OpenAPI only caters to HTTP APIs like REST. AsyncAPI is a good fit with protocols like AMQP, Kafka, MQTT, etc. You can check out our article on 7 protocols good for documenting with Async API, where we have discussed these protocols in detail.
Why Document An Asynchronous API?
When you’re creating different API endpoints, a point will come when you start forgetting the name of those API endpoints. Also, from a business point of view, you’re not the only one who’ll be consuming it, right? Thus, it’s best practice to document all the APIs you build, explaining each endpoint to help future API consumers. This will make your API easy to understand and let you focus on more development and improvement.
Some other benefits include:
- Documentation improves the API adoption rate.
- Documentation makes it easy for the development team (and the new members in the group) to understand the API and how it works.
- Documentation saves a lot of support time and cost for the company.
- Documentation makes API maintenance easier.
Top Async API Documentation Generators
If you’re using AsyncAPI and want to document your API, we’ve got you covered. We’ve curated a list of Async API documentation generators to help:
Widdershins uses templates to generate the markdown file. These templates are completely customizable and very easy to manage. Some of the companies that use Widdershins are Shutterstock, Capital One, Open EO, and others.
- Command to install WidderShins:
npm install -g widdershins
- Check out a live preview: https://api-reference.shutterstock.com/#overview
Generator is another one of the best Async API documentation options. As per their website, it lets you generate whatever you want to. What they actually mean is that you can generate HTML documentation, NodeJS code as well as Markdown documentation. It uses a template system to generate documentation for the APIs. To generate API documentation, you’ll have to create a template and then use that template to create pages. There are few pre-generated templates available for Generator like
- Command to install Generator:
npm install -g @asyncapi/generator
api2html is a CLI tool used to generate AsyncAPI documentation using raw API data. It supports different API definitions like Open API, AsyncAPI, and Swagger and generates HTML documentation. The documentation generator supports 33 languages (not programming language) and can serve static and dynamic pages. One of the best parts of api2html is that it uses the
Cache-Control header to make API requests. So if you make any API requests through api2html, it’ll save the cache’s response for a specific period of time. This documentation generator’s resource consumption is very low (around 15MB), so you don’t have to worry about the server crash if you host it on the same server as API.
- Command to install api2html:
npm i api2html -g
- Check out the live preview: https://tobilg.github.io/api2html/petstore/#swagger-petstore
Bump is another Async documentation generator that uses GitHub Actions to generate and synchronize the documentation with the API automatically. It supports OpenAPI and AsyncAPI definition. You might be wondering — what are GitHub Actions? They’re used to automate the software development workflows. This lets you build, test, deploy your code on GitHub, and keep track of code changes. The UI of the documentation tool is very clean and serves as a single page application.
Springwolf is an Async API documentation generator that is inspired by SpringFox, another API documentation generator for REST APIs based on Spring and JSON. SpringWolf is used to generate API documentation based on Spring Boot and follows AsyncAPI definitions. It generates API documentation, which has auto-generated payload examples and an easily customizable UI. It can automatically generate API documentation using listener annotation like
@kafkalistener. This API documentation is useful for Kafka consumers.
- Command to install SpringWolf:
git clone https://github.com/springwolf/springwolf-core.git
- You can also check a live preview at: https://springwolf.github.io/springwolf-ui/
Saunter is another API documentation generator used for .NET APIs. Saunter currently supports HTTP binding and Kafka bindings. This AsyncAPI documentation generator is inspired by Swashbuckle, which is another .NET API documentation generator but for REST APIs.
- Command to install Saunter:
dotnet add package Saunter
- You can check out the live preview at: https://github.com/tehmantra/saunter
Scribano is used to generate documentation for AsyncAPIs that use RabbitMQ. It keeps track of all the messages received and sent using RabbitMQ and keeps updating the AsyncAPI definition based API served at
/asyncapi. RabbitMQ is a message exchange, and Scribano receives all the messages from it. After receiving the messages, it generates and serves the documentation at the
- Command to install Scribano:
git clone https://github.com/uesteibar/scribano.git
AsyncAPI React is an official ReactJS component for documenting AsyncAPI. You can integrate your own custom React components in this documentation generator to make it look more beautiful. The AsyncAPI React comes with a Playground Application that lets you test the API on the go. It also allows you to use Angular components to make more customization changes.
- Command to install AsyncAPI React:
npm install --save @asyncapi/react-component
- You can also check the live preview at: https://asyncapi.github.io/asyncapi-react/
Did we leave out an AsyncAPI documentation generator? Comment below, and we’ll consider adding it to our list!
In this article, we tried to include the best AsyncAPI documentation solutions to generate documentation for your asynchronous APIs. Everyone has their different requirements, and these documentation generators can fulfill them. Some of these API documentation tools can help you to run your APIs as well on the go. So it depends on your requirements as well as the end goal that you want to achieve with these tools. We have also covered some of the best OpenAPI V3 documentation tools — check that out as well if you want to document your REST API.
Source: Nordic APIs