As a follow-up on the presentation I did at CloudBrew about Azure Static Web Apps I want to write a series of blog posts.
- Part I - Using the VS Code Extension
- Part II - Using the Astro Static Site Generator
- Part III – Deploying to multiple environments
- Part IV – Password protect your environments
- Part V – Traffic splitting
- Part VI – Authentication using pre-configured providers
- Part VII – Application configuration using staticwebapp.config.json
- Part VIII – API Configuration
- Part IX – Injecting snippets
- Part X – Custom authentication
- Part XI – Authorization
- Part XII - Assign roles through an Azure function
- Part XIII - API integration
- Part XIV – Bring your own API
- Part XV – Pass authentication info to your linked API
- Part XVI – Distributed Functions
- Part XVII(this post) – Data API Builder
So far I have shown you 2 different possibilities to integrate an API inside your Azure Static Web App:
- You have the Managed Function option where you get a built-in Azure Function with a limited set of functionality for free.
- You can link your existing API built using Azure Functions, Azure Container Apps, Azure API Management or Azure App Service.
If we look at most applications, these API’s are used to read and write data in a database. If this is also the case for your application, Azure Static Web App has a 3th possibility; the database connection feature.
Database connection feature
The database connection feature allows you to access a database from your static web app without writing custom server-side code. It is based on the Data API Builder project I talked about in a previous post and allows to create a REST and GraphQL api based on your data source.
Both relational(Azure SQL, MySQL and PostgreSQL) as non-relational (Azure Cosmos DB) databases are supported.
It is the perfect fit if you want an API with simple CRUD operations, built-in authorization, and relationships.
Integrate the Data API Builder into your Azure Static Web App
It all starts by creating a swa-db-connections folder at the root of your repository. Inside this folder you should add a staticwebapp.database.config.json
file. This file defines the runtime behavior of the database connection.
Remark: You can use a different folder if you want by changing the data_api_location setting in your build pipeline:
Inside the staticwebapp.database.config.json
file, we can specify if we want to expose both a REST and GraphQL endpoint, which Tables or Entities can be accessed, which operations are supported and so on…
Here is an example where I allow all CRUD actions on a dbo.Product table:
Remark: If you want to learn more on how to configure the Data API Builder, have a look at my previous post and the Data API Builder documentation.
Once the configuration file is in place, we can go to the Azure Portal and link a database to our static web app:
- Go to your Azure Static Web App in the Azure Portal.
- Open the Database connection section in the Settings.
- Click on the Link existing database link to any of your environments.
- On the Link existing database screen, enter the following details:
- A database type(e.g. Azure SQL Database)
- The subscription and resource group where the database can be found
- The Resource name of the database instance and the specific database inside the instance
- The authentication type
- Depending on the authentication type, you need to enter different details. In our case we need to provide a username and password.
- Click on Link to complete the process.
Remark: If your Azure Static Web App isn’t able to connect to your database, check that Allow Azure services and resources to access this server is checked in the Networking –> Exceptions section of your database server.
Calling the API
We can now call the API through the /data-api endpoint. As we have set in our configuration that anonymous access is allowed, we can directly call the endpoint without authenticating first.
Here is the call using the REST endpoint:
And here we are using the GraphQL endpoint(notice that we get introspection for free):
Remark: The first call can take a little bit longer so certainly implement a retry strategy.
More information
Connecting to a database with Azure Static Web Apps | Microsoft Learn