Appfarm Documentation
Getting startedDocumentationCommunityAppfarm Create
  • Overview
  • Getting Started
    • What is Appfarm?
    • Key concepts
    • Quickstart
      • Speed intro
      • Step-by-step guide
    • Appfarm Showroom
    • FAQ
  • Appcademy
    • Learning paths
    • Appfarm Fundamentals
      • Intro Course
        • 1. Intro to No-Code and Appfarm
        • 2. Navigation in Appfarm Create
        • 3. What is Apps?
        • 4. Intro to UI Editor
        • 5. Data Model
        • 6. App Data
        • 7. Actions
        • 8. Tips and Tricks
        • 9. Intro to practical walkthrough
        • 10. Create a details view of a Project
        • 11. Create a Custom List
        • 12. Swipe and Delete
        • 13. Functionality for simple Create of Data
        • 14. Upload and Download Photos
        • 15. Input Dialog with Validation and Save
        • 16. Dashboard
        • 17. Summary
        • Quiz
      • User Interface Fundamentals
        • Container - Sectioning, Styling and Repeating
        • Conditional Styles
        • Motions
        • Responsive Design
        • Step-by-step workflow
        • Featured UI Components
        • Quiz
      • App Data Fundamentals
        • Data Source Filtering
        • App Variables and Runtime Properties
        • URL Parameters
        • Quiz
      • Actions & Logic Fundamentals
        • Event Handlers
        • Featured Action Nodes
        • Context Parameters
        • Quiz
      • Services Fundamentals
        • Introduction to Services
        • Setting up a Service
        • Scheduling a Service
      • Integration Fundamentals
        • The web request action node
        • Fetch data from an endpoint
        • Map data to a data source
        • Modify the response
        • Nested data mapping
        • Path parameters
        • Authentication
        • Send data to an endpoint
        • Quiz
      • User handling and permissions
        • Users and roles
        • Permissions
        • Creating users
        • Extending the User object class
        • Updating and deleting users
        • Unauthenticated access
        • Quiz
    • Appfarm Professional
      • User Interfaces
        • Featured UI Components
        • Concepts and Use Cases
      • Data Structures & Data Handling
        • Data Features
        • Search & Filters
        • Featured Action Nodes
        • GraphQL
      • Logic & Flow
        • Logical Concepts
        • Date and Time Handling
        • Featured Action Nodes
        • Exception Handling
      • Login & Configuration
        • Login and Authentication
        • Settings, Configuration and Languages
      • Security & Operations
        • Security and Permissions
        • Deployment
        • Schedules and Logs
        • Debugging and App Health
      • Performance & Optimization
        • Optimizing Performance
        • Enhancing Functionality
    • Appfarm Sales Representative
    • Appfarm Developer Forum
      • Session 1: Data Modeling in Appfarm Create
      • Session 2: App Data in Appfarm Create
      • Session 3: Services in Appfarm Create
      • Session 4: Optimizing Performance
    • Background
      • Databases
        • Data modeling 101
        • Database normalization
  • Library
    • UI components
      • Advanced bar chart
      • Advanced bubble chart
      • Advanced combined chart
      • Advanced gantt chart
      • Advanced heatmap chart
      • Advanced line/area chart
      • Advanced pie chart
      • Advanced scatter plot chart
      • Advanced solid gauge chart
      • Animated component
      • Avatar
      • Avatar group
      • Basic bar chart
      • Basic gauge chart
      • Basic line chart
      • Basic pie chart
      • Bottom navigation
      • Button
      • Checkbox
      • Chip group
      • Circular progress
      • Coded component
      • Container
      • Date & time picker
      • Drawable canvas
      • Floating action button
      • Icon
      • Icon button
      • Iframe
      • Image
      • Linear progress
      • List
      • Map
      • Menu list
      • Multi select
      • PDF reader
      • Popover
      • Radio buttons
      • Rich text editor
      • Rich text
      • Select
      • Slider
      • Speed dial
      • Switch
      • Table
      • Tabs
      • Text
      • Text edit
      • View container
      • Visibility group
    • Action nodes
      • Aggregate data
      • Advanced search
      • Auth operations
      • Block
      • Catch exception
      • Copy to clipboard
      • Create file archive
      • Create file object
      • Create object
      • Create user account
      • Delete objects
      • Delete user account
      • Duplicate objects
      • End execution
      • Exit block
      • Exit loop
      • Export data
      • Foreach
      • Generate document
      • If
      • Import data
      • Invalidate cache
      • Log in
      • Log to console
      • Log out
      • Next iteration
      • Navigate
      • Open/close popover
      • Open confirm dialog
      • Open print dialog
      • Open snackbar
      • Open Unsplash dialog
      • Open URL
      • Persist objects
      • Push notifications
      • Read objects
      • Request permissions
      • Run code
      • Run other action
      • Run service
      • Scan barcode/QR code
      • Send email
      • Send SMS
      • Set client language
      • Set data source attributes
      • Set selection
      • Set theme
      • Set user account image
      • Show install app prompt
      • Sleep
      • Sort objects
      • Throw exception
      • Toggle drawer
      • Update object
      • Update secret
      • Update user account
      • Web request
      • While
  • Reference
    • Appfarm Create
      • Appfarm Commander
      • Blue dots
      • Copy & Paste
      • Farmer's Market
      • Find references
      • Find usage
      • Keyboard shortcuts
      • Undo/Redo
      • User preferences
    • Platform concepts
      • Conditions
      • Data bindings
      • Date and time
      • Event handlers
      • Filters
      • Functions
      • Markdown
      • Objects
      • Operators
      • Value processor
    • Dashboard
    • Apps
      • UI
        • Views
          • Dialog
          • Drawer
        • Layout designer
        • Component properties
        • Shareable UI components
      • Data
        • App variables
        • Data sources
        • Calendar data sources
      • Actions
      • App settings
      • App size
      • App health
    • Services
      • Service Endpoints
      • Service settings
      • Service health
      • API explorer
    • Data model
      • Object classes
      • Object class properties
      • Enumerated types
      • GraphQL
        • Queries
        • Mutations
      • Data Extract API
      • Time series data
    • Operations
      • Deploy
      • Schedules
      • Logs
    • Resources
      • Themes
      • Files
      • Fonts
      • Internationalization
    • Configuration
      • Environments
      • Login
        • Custom auth providers
    • Security
      • Users
      • Service accounts
      • Roles
      • Secrets
      • Permissions
        • Conditional Permissions
    • Appfarm Client
      • Developer tools for Apps
      • Developer tools for Services
      • Warnings and errors
  • How to
    • Data modeling
      • Many-to-many relationships
      • Use naming conventions
      • Offline data handling
      • Data silos and White labelling
    • User interface
      • Manage a many-to-many relationship with a Chip group
      • Configure drag and drop
      • Build a drag-and-drop calendar
      • Design a responsive layout
      • Work with flexbox
      • Use Mapbox as a map layer
      • Understand charts
    • Logic and flow
      • Event Log Design
      • Configure advanced search
    • Themes and styling
      • Change the active theme
      • Add custom email templates
    • Enhance your app
      • Add deep links
      • Add keyboard shortcuts
      • Add link previews for social media
      • Apply SEO best practices
      • Change the active language
      • Generate a PDF from a Container
    • Integrations
      • Integrate with external systems
      • Integrate with OpenAI
      • Integrate with Google Analytics (GA4)
      • Configure a custom email account
      • Integrate with a payment provider
      • Integrate with Signicat
      • Integrate directly with an external database
      • Retrieve a Bearer token from Google Cloud
      • Fetch data from BigQuery
      • Retrieve access token from Microsoft Entra ID
    • Workflow automation
      • Update an OAuth 2.0 access token from a service
    • Authentication and access control
      • Add users and assign roles
      • Configure unauthenticated access
      • Implement third-party authentication
    • Security, testing and deployment
      • Add a custom domain
      • Install an app on a device
      • Get ready for Production
      • Optimize performance
      • Security checklist
      • Test and debug
    • Example apps
      • Create an Instagram clone
        • The end result
        • Designing the feed
        • Create new post
        • Add a like-button
        • Add comment-functionality
  • Solution administration
    • Subscription and billing
    • Dedicated tier benefits
    • Guide to GDPR
      • Key principles
      • How Appfarm protects personal data
      • How you can protect your clients’ data
      • Glossary
    • Appfarm and the EU AI Act
  • Policies
    • Appfarm Policies
    • Data Processors
    • Privacy Policy
Powered by GitBook
On this page
  • Hasura
  • Getting data from Azure SQL with Hasura
  • Create a new Hasura Project
  • Allow Hasura to communicate with Azure - IP whitelisting
  • Connect the Azure database to Hasura
  • Test GraphQL queries in Hasura
  • Connect to Hasura from Appfarm using a Web Request

Was this helpful?

Export as PDF
  1. How to
  2. Integrations

Integrate directly with an external database

PreviousIntegrate with SignicatNextRetrieve a Bearer token from Google Cloud

Last updated 1 year ago

Was this helpful?

Appfarm supports integration towards external APIs (REST, GraphQL or SOAP) by using the action node (when the push or pull is initiated by Appfarm) or with (when a third-party system initiates the push or pull towards Appfarm).

From an architectural perspective, you should always build an API on top of a database when the database is owned by an external system or if you are building a data platform. However, in some cases, you might want to access the database directly when no API is in place. Examples:

  • You are hosting data internally on a database platform (Such as Azure SQL, Oracle, SQL Server, PostgreSQL, MongoDB, IBM DB2), such as when building a data platform or hosting a data warehouse. But there is no web-based API for accessing these data.

  • You have access to the database of an old legacy system, without any APIs for accessing these data.

Appfarm does not have built-in database connectors. However, third-party tools exist for this purpose, enabling REST or GraphQL Interfaces on top of an existing database. We suggest one simple tool below for this case, but please note that other lightweight tools as well as more powerful Integration Platforms (for automation and more advanced integrations) also exist. Some database providers offer built-in support for enabling REST or GraphQL interfaces for accessing the database as well.

Hasura

is an open-source tool that may be hosted yourself (for free) or hosted in the cloud (subscription, see ). It is easy to set up. By setting up Hasura, you let Hasura connect to your databases, and it will provide a REST or GraphQL endpoint on top of the databases.

This means, that Appfarm may use the Web Request action node either to

  • Send SQL Statements to the Hasura REST endpoints

  • Send GraphQL queries or mutations to the Hasura GraphQL endpoints

Both of these options give you data back in JSON format, allowing you to map the response to your Appfarm Data Sources using the Result Mapping of the Web Request action node.

Getting data from Azure SQL with Hasura

This is a short step-by-step guide using the Hasura Free version (hosted in Hasura cloud) to retrieve data from a table in an Azure SQL database.

Create a new Hasura Project

Sign up at . Navigate to Projects -> Create new Project. Select your preferences, similar to this

Allow Hasura to communicate with Azure - IP whitelisting

In Hasura, click the cog wheel icon on the Project to see the settings. Note down the IP-address, as you will need to enter it in Azure.

In Azure, locate the SQL Server resource, and click it. On the left menu, go to Security -> Networking and add a new Firewall Rule. Give it a proper name, and enter the IP address of the Hasura project.

Connect the Azure database to Hasura

In Hasura, click Launch Console for you project. Navigate to the Data menu. Having the Data Manager selected in the left menu - click Connect Database. Select MS SQL Server and click Connect Existing Database. Give it a proper name and enter the Database URL: Driver={ODBC Driver 17 for SQL Server};Server=<SQL Server database address>;Database=<database name>;UID=<SQL Server user>;PWD=<SQL server password>;

  • Server: You may find this address in Azure when navigating to the Azure SQL Server instance. It is the "Server name" property found on the front page

  • Database: This is the name of the database in Azure SQL

  • UID: This is the username of an SQL Server user with access to the database.

  • PWD: This is the password that UID.

Click Connect Database.

Now, in the left menu, locate your database in the Datebases menu. Click <your-database-name> -> dbo. In the details window, click Track All (or just Track on the relevant tables)

See examples below.

Test GraphQL queries in Hasura

To verify the connection, navigate to the API menu in Hasura. You should see your tables in the explorer to the left. In the below screenshot, we have just a single table "Employees" in Azure SQL. Using the explorer, expand the Employees entry and select the columns your want to get from Azure SQL, and click the Play icon:

The important part for now is the query in the center panel above. You do not need a name for the query. Here's a few example queries:

To get all Employees:

query {
  Employees {
    EmailAddress
    PhoneNumber
    EmployeeID
    FirstName
    LastName
  }
}

To get a filtered set of Employees (note the where keyword here, and operators with a underscore prefix, as opposed to the filter keyword used when using GraphQL in Appfarm ):

query {
  Employees(where: {FirstName: {_eq: "John"}}) {
    EmailAddress
    PhoneNumber
    EmployeeID
    FirstName
    LastName
  }
}

Connect to Hasura from Appfarm using a Web Request

  1. First, still in Hasura, go to the project front page, copy the Admin Secret, and save it in Appfarm Create (as a Secret).

  2. In Appfarm Create, you will need an Object Class for representing Employees. Create the Object Class (if you have not done it already) and add the Object Class Properties. With reference to the above Employees example, you may add Employee ID (integer), Email (string), First name (string), Last name (string) and Phone (string). We recommend using the same Node Name for these Object Class Properties as the name of the columns/graphQL properties in Hasura.

  3. Add Employees as a Runtime Only Data Source in your App.

  4. Add a Web Request to an Action.

    1. Request Headers: Add x-haura-admin-secret, and select the secret stored in 1) as value

    2. Authorization: No Auth

    3. Method: POST

    4. Body: Use the function editor to return a GraphQL query. See Example Queries below.

    5. Result Mapping: RootPath is data.<tablename> (example: data.Employees). Select the Employees data source of step 2) as Data Source. Enter the column names manually, or click Automap Node Names if the Node Names in Appfarm match with the response from Hasura GraphQL.

With reference to the Function editor, you may construct the following function. Here, we return all 5 properties for all Employees.

let myQuery = `{
  Employees {
    EmployeeID
    FirstName
    LastName
    EmailAddress
    PhoneNumber
  }
}`

return {query: myQuery}

With reference to the Function editor, you may construct the following function. Here, we return 3 properties for a specific Employee - more precise - the Employee with a given phone number.

let myQuery = `{
  Employees(where: {
    PhoneNumber: {_eq: "555-5678"}
  }) {
    EmailAddress
    PhoneNumber
  }
}`

return {query: myQuery}

Now, we are ready to query the GraphQL endpoints in Hasura from Appfarm, using the action node.

URL: The GraphQL Endpoint found in the API menu in Hasura (see above)

Web Request
screenshot
Web Request
Hasura
https://hasura.io/pricing/
https://cloud.hasura.io/
Allowing Hasura through the Azure firewall
Setting up the connection string to the Azure SQL database in Hasura
Service Endpoints