In this tutorial, we will build a complete, real-world feature from start to finish. We’ll create a “Joke Generator” that calls a public API to fetch a random joke and streams the result back to our UI in real-time, like a chatbot. We will cover:
- Configuring an API Call to connect to an external service.
- Setting up State to manage the joke data, loading status, and potential errors.
- Building the UI to display the data and provide user feedback.
- Creating a Workflow that ties everything together.
Prerequisites: Setting Up Your Page
Before we begin, you need a page with a few basic elements.-
Create Three State Variables: Select the
Body
of your page and go to the States tab. Create the following:jokeText
(Data Type:Text
, Default Value: “Click the button to get a joke!”)isLoading
(Data Type:Boolean
, Default Value:false
)errorMessage
(Data Type:Text
, Default Value: leave empty)
-
Add the UI Elements: On your canvas, add:
- A Button with the text “Get New Joke”.
- A Text Element to display the joke. Bind its Content Source to the
jokeText
state variable. - A Text Element for errors (e.g., “Oops! Something went wrong.”). Use a Condition to make this element visible only when the
errorMessage
state is not empty.
Part 1: Configure the API Call
First, we need to teach Saasio how to talk to the external joke API.1
1. Navigate to API Calls
In the top navigation bar, go to Data → API Calls.
2
2. Create an API Folder
Create a new folder to keep things organized. Let’s call it
Joke API
.3
3. Add a New API Endpoint
Inside the folder, click ”+ Add new call” and name it
Get Random Joke
.
This will open the configuration panel.4
4. Configure the Endpoint
Fill in the details for the public API. For this tutorial, we’ll use a simple joke API.
- Method:
GET
- URL:
https://official-joke-api.appspot.com/random_joke
- Response Type:
JSON
This is a simple public API, so no Headers or Body are needed.
Part 2: Build the Workflow
Now we’ll create the logic that runs when the user clicks our button. This workflow will handle the API call, update our UI with the result, and manage any potential errors.1
1. Select the Button and Open the Logic Tab
Go back to your page and select the “Get New Joke” button. Then, click the Logic tab in the top navigation bar.
2
2. Clear Old Data (Optional but Recommended)
Before we fetch a new joke, it’s good practice to clear out any old data.
- Click ”+ Add Action” and choose “Set data in state”.
- Target State: Select your
errorMessage
state. - New Value: Leave the value empty to clear any previous error messages.
- Add a second “Set data in state” action, select
jokeText
, and set its value to “Fetching new joke…” to provide instant feedback.
3
3. Add the 'Make an API call' Action
This is the core of our workflow.
- Click ”+ Add Action” again and choose “Make an API call”.
- API Folder: Select
Joke API
. - API Endpoint: Select
Get Random Joke
.
4
4. Handle the API Response
Now, we tell Saasio how to automatically manage our state based on the API call’s outcome.
- Result: Select your
jokeText
state variable. The successful response from the API will be stored here. - Error: Select your
errorMessage
state. If the API call fails for any reason, the error message will be stored here. - Is Loading: Select your
isLoading
state. Saasio will automatically set this totrue
when the call starts and back tofalse
when it finishes (whether it succeeds or fails).
Transforming the Result: The API returns a JSON object like
{"setup": "Why did the...", "punchline": "Because..."}
. We need to combine these into one string.In the Result field’s configuration, you’ll build a dynamic expression:- Start with the
actionResult
(this represents the data returned from the API). - Use the
Get value from path
operation to get thesetup
. - Add a
concat
operation to add a space or a new line. - Use another
Get value from path
operation on theactionResult
to get thepunchline
.
jokeText
state.The Final Result
You’ve now built a complete, end-to-end feature!- When a user clicks the button, the
isLoading
state becomestrue
(you could use this to show a loading spinner). - The API call is made.
- If it’s successful, the setup and punchline are combined and streamed into the
jokeText
state, causing the text on the screen to update in real-time. - If it fails, the
errorMessage
state is populated, causing your error message to appear. - When the call is finished,
isLoading
is automatically set back tofalse
.