Product Scoop – February 2022

Table of Contents

February may have fewer days than other months, but it makes up for it with extra great new features!  This month, track changes to recipes with visual diffs, use OpenAPI to kickstart API development, and more.

Compare any two versions of a recipe with visual recipe diffs

Whenever teams collaborate on a project over time, it’s essential to be able to manage versions, and to have visibility into what changes have been made between versions. For example:

  • When reviewing and approving a new version, you need to be confident that you have a precise and complete understanding of the changes, and that you haven’t missed anything.
  • To roll back an unwanted change and restore a previous version of a project, you need to be able to identify the right version to restore.
  • When more than one person is working on a project, you need to be able to understand the changes your coworkers have made recently to avoid conflicts and double work.
  • If you’ve been away from a project for a time, you need to review your own most recent work, so you can pick up where you left off.

You can discover what’s changed between two versions of a recipe with visual recipe diffs. To view a diff, just head to the Versions tab of any recipe, select any two versions, and click the Compare button.

The diff view shows a visual representation of changes between the two versions:

The diff will show several types of changes, including:

  • Added or removed recipe steps
  • Moved steps
  • Steps nested/unnested in a conditional block
  • Steps with an updated configuration

To read more about visual recipe diffs, head to the full launch blog.

Accelerate low-code/no-code API development with OpenAPI

When developing APIs it’s vital to consider the experience of the consumer. Consuming an API is a user experience, just as much as using a visual UI. Therefore, to create a positive user experience, you need to invest in API design. And just like UI designers create wireframes and mocks in tools like Figma and Sketch, API developers have their own design tools, like PostmanSwaggerApiary, and Stoplight.

Developers use API design tools to sketch out the details of a suite of APIs in an industry standard format called OpenAPI. An OpenAPI specification sets out:

  • The title and metadata for the API
  • Each supported path (like `GET /cases/{case_number}`)
  • Required parameters for each request
  • All possible responses to a request, including errors
  • Details of the business objects handled by the API (such as cases, invoices, etc)

The OpenAPI spec can then be used to automatically generate documentation or even a mock server that consumers can use to develop API clients before the API is production-ready.

Now, builders can also take advantage of OpenAPI specs to speed the development of APIs. Simply import an existing OpenAPI spec into Workato, and we’ll automatically generate an API collection, and create an API recipe for each endpoint.

Each generated recipe will already include:

  • Input fields
  • Each possible response, including errors
  • Output object for each response

All you have to do to release a working API is complete the business logic in each recipe.

Check out the full launch blog to learn more about how to leverage OpenAPI specs to generate API collections.

Manage reference data with improved lookup tables

Update a table from a CSV file

Lookup tables are a simple way to access frequently used data in a recipe. For example, you might use a lookup table to store a cross-reference between the different forms of country code required by different apps. These types of cross-reference tables can run to thousands of entries, so it’s common to create them by importing a CSV file into Workato.

If you need to change the entries in a lookup table after creating it, you can now import a CSV file to update it. Just navigate to the table and click Import CSV.

When importing a CSV into an existing lookup table, you have two options:

  • Completely replace the existing data: use this option when you want to upload a complete updated reference table.
  • Add new entries: adds the data from the new file to the lookup table without deleting the existing data. Use this option to build a single lookup table from multiple source files.

Add or delete rows in bulk from a recipe

Lookup tables can also act as a cache for transient information in a business process. For example, you might use a lookup table as part of your global error handling process to track retries for failed jobs.

Two new batch actions for the lookup table app allow you to add a batch of rows in a single action, or to delete multiple rows that match a given condition.

Get building faster with new recipe shortcut

Had a brainwave and just can’t wait to start on a new recipe? We get it. Just type recipes.new in your browser window. If you’re logged into Workato, you’ll head straight to the recipe creation wizard.

Wrangle bulk data with improved variables

Variables are an essential tool for moving and transforming data. To help you wrangle data at scale, we’ve released two updates to the variables app.

Update multiple variables in a single action

As a general rule, fewer steps equals more readable, maintainable recipes. To help keep your recipes simple, you can now update multiple variables in a single action, removing the need to create a separate step for each variable.

Add a batch of items to a list

You can now add items to a list in a batch. This means that working with large lists, or building up a list from multiple sources is faster and uses fewer tasks. You can add list items either when you first create a list, or later, using the new Add items to list (batch) action. For example, you can build a list of daily leads from CSV files in an S3 bucket, without having to loop through each individual line of each file. Just add all items from each file to the list in a single action.

Faster troubleshooting with updated filters for API logs

When you’re trying to diagnose an issue with an API, your logs are an obvious place to start. But if the logs you’re interested in stretch a long way back, or you have a large number of records, it can be hard to find the records you need with standard date filters like “Last hour” or “Last 7 days”.

To make it easier to find the data you need, you can now filter your API logs by a custom date range.

You can also narrow your search only to a specific response code.

Connect Everything

Move more data with AWS SQS

AWS SQS can be used to stage large amounts of data, for example, for loading bulk records from a system of record to a system of engagement. To make it easier to work with bulk data from SQS, we’ve added a new batch version of the New Messages trigger that can accept up to 2000 records at a time. A corresponding Delete Messages (batch) action can delete up to 2000 records from the queue.

Fine-grained permission control for Google Sheets

Service Accounts are a special type of Google account for dedicated machine users. You can now authenticate with the Google Sheets connector as a Service Account, in addition to standard OAuth authentication. This allows you even greater control over the permissions your Workato connection has, and helps to ensure that your automations continue to run even when the permissions of individual users change.

Enhanced event monitoring with Okta

The ability to respond rapidly to potential threats is essential for organizational security. The Okta connector helps you both monitor for potential threats, and act in response. You can now select multiple event categories, including “other” events when you set up a New Events trigger, broadening the scope of events you can monitor and respond to with a single recipe.

Find data from your custom HTTP requests

The custom HTTP connector can be used to make requests to any REST API endpoint. If you’re making requests to more than one API in a recipe, it’s useful to be able to distinguish your custom requests from each other. For this reason, the recipe data widget now displays the name of each request so you can easily find the data you need.

Was this post useful?

Get the best of Workato straight to your inbox.

Table of Contents
array(6) { [0]=> object(WP_Term)#3008 (11) { ["term_id"]=> int(62) ["name"]=> string(3) "csv" ["slug"]=> string(3) "csv" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(62) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(3) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } [1]=> object(WP_Term)#3009 (11) { ["term_id"]=> int(313) ["name"]=> string(4) "okta" ["slug"]=> string(4) "okta" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(313) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(2) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } [2]=> object(WP_Term)#3010 (11) { ["term_id"]=> int(358) ["name"]=> string(13) "Lookup Tables" ["slug"]=> string(13) "lookup-tables" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(358) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(3) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } [3]=> object(WP_Term)#3011 (11) { ["term_id"]=> int(417) ["name"]=> string(11) "Recipe Diff" ["slug"]=> string(11) "recipe-diff" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(417) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(2) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } [4]=> object(WP_Term)#3012 (11) { ["term_id"]=> int(421) ["name"]=> string(7) "OpenAPI" ["slug"]=> string(7) "openapi" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(421) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(2) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } [5]=> object(WP_Term)#3006 (11) { ["term_id"]=> int(424) ["name"]=> string(13) "Google Sheets" ["slug"]=> string(13) "google-sheets" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(424) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(1) ["filter"]=> string(3) "raw" ["term_order"]=> string(1) "0" } }