<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shantoie Vorster</title>
    <description>The latest articles on DEV Community by Shantoie Vorster (@shantoie).</description>
    <link>https://dev.to/shantoie</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F893899%2F9e0cb864-0255-4721-bafe-7327be0f55f4.jpg</url>
      <title>DEV Community: Shantoie Vorster</title>
      <link>https://dev.to/shantoie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shantoie"/>
    <language>en</language>
    <item>
      <title>Integrating Stuff - A look at why system integration is so hard and what can be done to make it easier</title>
      <dc:creator>Shantoie Vorster</dc:creator>
      <pubDate>Fri, 11 Nov 2022 13:44:52 +0000</pubDate>
      <link>https://dev.to/shantoie/integrating-stuff-a-look-at-why-system-integration-is-so-hard-and-what-can-be-done-to-make-it-easier-3c9m</link>
      <guid>https://dev.to/shantoie/integrating-stuff-a-look-at-why-system-integration-is-so-hard-and-what-can-be-done-to-make-it-easier-3c9m</guid>
      <description>&lt;p&gt;Living in an ever-connected world to have every application talk to another is the goal. I say it is the goal because the reality is that someone has to build the integration functionality. Suppose you have ever been part of an integration project or even ventured into the realm of developing something that allows two applications to share data, work together or share functionality in any way. In that case, you know it can be pretty challenging. &lt;/p&gt;

&lt;p&gt;Fortunately, such integration projects are becoming more manageable, especially with modern applications and platforms. There is an API available for everything. Before the era of REST APIs, there was SOAP, or heaven forbid, direct data access. &lt;/p&gt;

&lt;p&gt;If you are looking to do an integration, there are a few things to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why do I want to integrate?&lt;/li&gt;
&lt;li&gt;How will these two (or more) systems interact with each other?&lt;/li&gt;
&lt;li&gt;What will I use to facilitate this integration?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, we can ask many more questions, but for this post, let us focus on those questions. Before we delve into those questions, it would be good to start with the basics:&lt;/p&gt;

&lt;h2&gt;
  
  
  What is system integration?
&lt;/h2&gt;

&lt;p&gt;System integration is the process of combining different systems and software so that they can work together. It is also the process by which a system or application can interact with other systems, applications, or devices.&lt;/p&gt;

&lt;p&gt;Some would argue that integration is all about data exchange, and although that is true to a certain extent, we must recognize sharing of system functionality. For example, if one application holds the data and another is used to send emails to clients, we need to create an integration that will allow us to access that data to send reports to our users via email. We will need a bit of both systems to do this. This is a very rudimentary example, but you get the gist of it. &lt;/p&gt;

&lt;p&gt;An integration system is an application that focuses explicitly on handling this interaction. This can be necessary when there is no natural or built-in way for two applications to interact. Think of those legacy systems at your company with no APIs or integration features. &lt;/p&gt;

&lt;p&gt;Since we are also moving in a direction where APIs are the norm, integration is becoming easier. APIs make it easier to access data and features of applications without having to delve directly into their data sources. Before APIs were a big thing, many integrations had to be done by accessing one application's database directly, reading files produced by that application or a custom piece of code had to be written to access the application directly. &lt;/p&gt;

&lt;p&gt;It sounds deceptively simple, and to a certain extent, it can be. If you simply need to call an API then it is not so hard (depending of course on the unique complexity of the API in question). The tricky part comes in with orchestration and infrastructure. When should what happen, and how is data/functionality to be used? Before starting with the integration, be sure to understand your requirements and how these systems interact. &lt;/p&gt;

&lt;p&gt;In addition to understanding the required interaction, you must choose the tool to facilitate the integration. Here you can choose code, but there is also the option to select a &lt;a href="https://dzone.com/articles/low-code-viable-for-developers"&gt;low-code option&lt;/a&gt;. Choosing a low-code option can allow you to use predefined components and functions specifically made to facilitate integration and interactions with specific systems and applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why is integration challenging?
&lt;/h2&gt;

&lt;p&gt;Every integration is different. Some will be difficult, and some will be easy. Depending on the system you are integrating with, how you interface with that system will differ based on its architecture, technology and even the methodology used to build that system. As mentioned, many systems have APIs that make integration and interaction much easier. However, some older and more bespoke systems may not have such luxury. &lt;/p&gt;

&lt;p&gt;A big part of any integration project is a proper analysis of how we can retrieve data and access the system's functionality. A proper understanding of how we can interact with it is key to successful integration, especially if you need to build an integration system that needs to interact with many different systems/applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the requirement
&lt;/h2&gt;

&lt;p&gt;The first question I would ask is why we need to develop this integration. What is the end goal? This may sound strange, but I have found that people often don't understand the requirement. From personal experience, this is a recipe for disaster. &lt;/p&gt;

&lt;p&gt;Understanding the requirement will guide you through the entire integration. It will ensure that you select the correct integration method, select the correct tool to facilitate your integration and more. Will you need to interface via an API, or will it be a direct data access scenario where you need to read from a file, database table or any combination. In such a scenario, you might benefit from a tool that will allow you to create quick little ETLs. &lt;/p&gt;

&lt;p&gt;You don't have to fully understand all the smallest details, but a base understanding of why we are building the integration is crucial. Are we doing this to access data? Do we need to kick off some functionality from one system? What is the result of this integration? &lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the interactions
&lt;/h2&gt;

&lt;p&gt;How will one system interact with another? Your answers to the previous question will influence the answer to this question. Each integration is different. No two systems are the same, depending on when they were developed, what tools were used to develop them and what methodology and technology were popular at the time of development. &lt;/p&gt;

&lt;p&gt;For example, let us say that we have one system or process that needs to access the data in another. If an API is available, we can simply use that to retrieve the required data. If no API is available, the interaction becomes more complex as we will have to find a way to retrieve the data from the other system. This can either be done by direct database read, &lt;a href="https://dev.to/shantoie/a-better-way-to-import-files-46pg"&gt;direct file read&lt;/a&gt; or any other way, depending on what the two systems allow. &lt;/p&gt;

&lt;p&gt;Often you will not be able to have a direct interaction between two systems, in this case, you will either need to use a tool to create an integration system or tool, or you will need to create one. This is where choosing the right tool for the job will become important. &lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a tool
&lt;/h2&gt;

&lt;p&gt;Now for the fun part: choosing the tools for the job. There are many options; you can write a bit of code to facilitate API calls, use a specialised integration tool to facilitate a specific interaction, or even use a low-code tool to build your integration system. The answers to the previous questions will guide this process. The requirement and type of interaction between the systems will dictate if there are any technical specificities to the tool you will need to choose. &lt;/p&gt;

&lt;p&gt;I recently worked on an integration where a system had to retrieve data from Sage Intacct. I made my solution in &lt;a href="https://linx.software/"&gt;Linx&lt;/a&gt;, as it is my preferred tool for developing these integrations. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hinZ53zt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9lr4w6zc12vfnctudg0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hinZ53zt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9lr4w6zc12vfnctudg0.png" alt="A Linx function that consumes the Sage Intacct web service, thus integrating Sage Intacct" width="880" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I have found is that the hardest part is to start. I will use my most recent experience, Sage Integration, as an example. Data needs to be pulled from Sage for that data to be used in reporting in another application. &lt;/p&gt;

&lt;p&gt;I used Linx to connect to the &lt;a href="https://linx.software/blog/sage-intacct-integration/"&gt;Sage web service and pull the data&lt;/a&gt;. This came with a few challenges, such as figuring out how the Sage web service works. First, I had to retrieve a Session ID (their version of authentication). After the Session ID was retrieved I could call the relevant web service function to retrieve the data and write it to a database where my other process could use it. Read more on how I called the Sage Web Service here. &lt;/p&gt;

&lt;p&gt;For this straightforward integration, I essentially needed to create a middleman process, or middleman application often referred to as middleware:&lt;br&gt;
Middleware is software that connects two other software applications. It is often used in the context of computer networks to manage the flow of data between two or more programs.&lt;br&gt;
With Linx, I created a very simple integration application or middleware application to facilitate the flow of data or functionality between my two processes. I have used Linx countless times to do something like this, to integrate legacy applications with newer platforms, to ensure that functionality is accessible or even just to facilitate data exchange and flow between applications or processes. &lt;br&gt;
Low-Code tools as Integration builders&lt;br&gt;
There is a case for using a low-code tool to facilitate integrations. Low-code tools often benefit from having pre-defined functionality or components to interact with various systems, technologies or objects. &lt;/p&gt;

&lt;p&gt;For example, let's look at how we can use Linx to integrate different systems. Linx has components to interact with QuickBooks, Xero and other specific platforms, but we can always use a simple &lt;a href="https://linx.software/blog/no-connectors-no-problem/"&gt;REST API Call component to use a REST API&lt;/a&gt;. Linx also allows for direct database access and easy file reads. &lt;/p&gt;

&lt;p&gt;Let's say we have three applications or systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A system that captures financial data for clients that makes that data available via API&lt;/li&gt;
&lt;li&gt;A system that dumps specific client interactions into a CSV file&lt;/li&gt;
&lt;li&gt;A system where client data is captured via a front-end and that data, such as email addresses are recorded in a database&lt;/li&gt;
&lt;li&gt;We need to send a report to each client via email.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using a low code tool such as Linx, I can: Retrieve a list of clients with their email addresses from the database, read specific client interactions for the client from a CSV and then combine that data with data from the financial system to build a specific report. I can then use the low-code platform to send that email to the client and log it in a separate logging database. All of this will be done using pre-defined components and a drag-and-drop interface, making such a development much quicker than traditional development techniques such as Coding.&lt;/p&gt;

&lt;p&gt;In Linx, I would use a &lt;a href="https://linx.software/blog/building-a-file-reader/"&gt;file reader&lt;/a&gt;, a database reader and a Call REST API component to do this, and finally, compile the report and send the email using Linx components that access a mailbox.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0MI59Rzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3u8go2tt1gtwu7mrg6d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0MI59Rzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3u8go2tt1gtwu7mrg6d.gif" alt="A simple illustration on how to read and import files using Linx" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, all of this is possible with code, but it will take me much longer. Low-code tools come with the benefit of quicker development, and from experience, I can also say that it makes development of systems much simpler. When using a low-code tool, especially one geared towards developers, you are developing with much larger, pre-tested and pre-defined blocks. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Each integration is different and requires proper consideration and analysis before you jump into it. Choosing the right tool can make all the difference. Choose a tool that streamlines development and that allows for easier interaction with the different components of the integration. You will have more time to focus on figuring out the nuances and business rules of those interactions.&lt;/p&gt;

&lt;p&gt;Make sure that you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand your requirement.&lt;/li&gt;
&lt;li&gt;Understand how the two systems need to interact with each other.&lt;/li&gt;
&lt;li&gt;Choose the right tool. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>integrations</category>
      <category>api</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>Getting my API to Production</title>
      <dc:creator>Shantoie Vorster</dc:creator>
      <pubDate>Mon, 12 Sep 2022 10:15:29 +0000</pubDate>
      <link>https://dev.to/shantoie/getting-my-api-to-production-3g7l</link>
      <guid>https://dev.to/shantoie/getting-my-api-to-production-3g7l</guid>
      <description>&lt;p&gt;When you do a web search for “how to build an API”, I found that quite a few options come up, but very few are end-to-end guides. This may be due to my poor web search abilities or because it's quite hard to build an API (getting it from design to production).&lt;/p&gt;

&lt;p&gt;Anyone that works with APIs will tell you that it can be quite the feat, and a team of people usually manages it. So building an API yourself and getting it into production so your users can start using it can be a significant challenge. &lt;/p&gt;

&lt;p&gt;We live in a fortunate time where there are many tools that make this task much more manageable. With something like &lt;a href="https://www.postman.com/"&gt;Postman&lt;/a&gt;, we can create the API specification, test the API specification and ultimately test our API to ensure that it is working as expected. To build the back end of our API, we will need a host of tools such as Flask, Heroku and more, or we can opt for a low-code tool such as &lt;a href="https://linx.software/guide-postman-to-production/"&gt;Linx&lt;/a&gt; to build and host our API. &lt;/p&gt;

&lt;p&gt;In this post, we will look at the process of building an API and how this process can be made more efficient. &lt;/p&gt;

&lt;h2&gt;
  
  
  API Development process
&lt;/h2&gt;

&lt;p&gt;API development is complex, there is no way around it. Typically we need to design the API, code, test, debug, code again, test some more, deploy when we are ready, and then there is the seemingly endless maintenance. A typical API development life cycle will look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c2Znr9Vv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axmmyw6q3ihwiavbe1en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c2Znr9Vv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axmmyw6q3ihwiavbe1en.png" alt="Typical API development process" width="880" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each step in the process will typically be done by another tool or resource, so it can become quite an endeavour to implement an API. &lt;/p&gt;

&lt;p&gt;For example, we might opt to use Postman to design our API (Open API Specification) and use something like flask for our code connect firebase or some database to store or retrieve our data. We might also need to make additional REST calls to other APIs and services. To test, we can use Postman again, but debugging the code and all our connectors can become troublesome. For deployment, we might opt for Heroku, but it depends on what our API requires. For monitoring, we can either create our monitoring system or use something like Splunk. And when we need to maintain our API, we need to dive back into all of that. You get what I am trying to say. API development is complicated. &lt;/p&gt;

&lt;h2&gt;
  
  
  Finding a better way
&lt;/h2&gt;

&lt;p&gt;I wanted a way to simplify the API development lifecycle and to develop my APIs from design to production with only a hand full of tools. Thanks to low-code tools like &lt;a href="https://linx.software/postman-to-production/"&gt;Linx&lt;/a&gt;, this is possible. I was able to create an API, from design to deployment, using only three tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Postman&lt;br&gt;
I used &lt;a href="https://www.postman.com/"&gt;postman&lt;/a&gt; for creating my API specification (YAML based) and for testing my API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linx&lt;br&gt;
I used Linx to build my API, implement the logic, debug it and finally to host it. Quick note, you can also try your hand at building an API with this &lt;a href="https://linx.software/guide-postman-to-production/"&gt;guided tutorial&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SQL Server&lt;br&gt;
SQL Server was used to store data for my API. I used the pre-created AdventureWorks2019 database and its data. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The requirement
&lt;/h2&gt;

&lt;p&gt;I opted for a straightforward API that will do user record maintenance. The API has five methods:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GzNqGMCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ndcchr6cbddsaxt0dmao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GzNqGMCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ndcchr6cbddsaxt0dmao.png" alt="The API I was developing" width="880" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the specification
&lt;/h3&gt;

&lt;p&gt;I created a straightforward API specification in Postman using YAML that matches the requirement. Postman allowed me to see what I created and visually provided additional information. Creating the API definition in Postman also benefits it already sets up that API for testing. If you choose to, you can set up the testing scripts at this stage. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ztF44E8E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ig41db9u90heaszvzwnz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ztF44E8E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ig41db9u90heaszvzwnz.png" alt="Creating my API Specification in Postman with OpenAPI" width="880" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Building the API
&lt;/h3&gt;

&lt;p&gt;Now that I have the API definition, the code can be created. Linx allows you to import an OpenAPI 3.0 specification and will automatically generate the events for each method specified. I only needed to specify the URI  and then build the logic. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8HfCfXog--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8gg1f3gjqam5ggfxiabl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8HfCfXog--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8gg1f3gjqam5ggfxiabl.png" alt="Importing my API specification into the Linx Designer" width="880" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating each event's logic goes relatively quickly once the database plugin is installed. Linx does have a learning curve like every tool, but once you understand how to work with it, the pace picks up. &lt;br&gt;
I added logic and functionality to each event for the API. For example, for the GetAllUsers method, we all needed to read from the SQL database and return the results via the response body. &lt;/p&gt;

&lt;h3&gt;
  
  
  Testing the API
&lt;/h3&gt;

&lt;p&gt;Because the API is already set up on Postman, it was quite easy to test, in real-time, how the API operates now that the logic has been implemented. The GIF below shows how I used the Linx designer to debug the REST API I have created and how I am testing it in debug mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v41MqsHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rt81ec52glfkyyb96p44.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v41MqsHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rt81ec52glfkyyb96p44.gif" alt="Debugging the API with Linx and Postman" width="880" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the API being debugged in Linx, it's being hosted so that I can call it to see how it will behave when I deploy. This allows me to test and get an actual result back:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xHU1k4JZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lo7ttlgq9thrx4j5g3za.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xHU1k4JZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lo7ttlgq9thrx4j5g3za.png" alt="What happens when you debug in Linx" width="880" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, we can also add &lt;a href="https://blog.testproject.io/2020/07/15/using-test-scripts-in-postman/"&gt;test scripts&lt;/a&gt; in Postman to automate our testing process. These scripts will ensure that you are getting the correct response. &lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying the API
&lt;/h2&gt;

&lt;p&gt;Now that the API has been designed, developed and tested, it needs to be deployed. This can be a substantial task with traditional API development as we need to come up with a deployment strategy, figure out where we will be hosting what and make sure that monitoring and logging are taken care of and more. &lt;/p&gt;

&lt;p&gt;My deployment was quite simple. I deployed the API from the Linx Designer directly onto the Linx Server. It took about 2 minutes for the solution to be built, pushed to the server, and ready for use. The difficulty of hosting an API is removed as the Linx server handles this. It also does monitoring and logging:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jCdLWqUn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/salsthmce9ydpzttwg7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jCdLWqUn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/salsthmce9ydpzttwg7j.png" alt="Hosting the API in the Linx Server" width="880" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I called the GetUser method with an incorrect ID to see what would happen if an unexpected error occurred. The server logs the error and indicates with red that an error occurred:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lD3QlB0X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3nch1qmf5o5wfnhnpwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lD3QlB0X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3nch1qmf5o5wfnhnpwb.png" alt="How errors are captured in the Linx server" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was able to call the API from Postman again, and the server gives an indication each time that the API is called.&lt;/p&gt;

&lt;p&gt;Admittedly, I did not add any form of security or authentication to my API, but these settings are available in the Linx designer. Another option I tried was to generate the API Documentation in swagger format. This turned out to be quite valuable because by adding /swagger to the base URI, the documentation is available and hosted with the API itself. This makes it easy to distribute API documentation when needed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YKrYrms8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4eughw73bkz3xd1x750v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YKrYrms8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4eughw73bkz3xd1x750v.png" alt="The hosted documentation of my API" width="880" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;When combining Linx and Postman, we can design, create, document and host APIs. It does take a bit of getting used to, much like any tool. Because Linx uses standard programming paradigms and jargon, it is easy to pick up if you are familiar with a programming language like C#. I do feel that we save the most time when deploying and hosting an API with Linx. Monitoring and hosting are done for you, meaning that a substantial headache is taken care of. If the logging and monitoring are not granular enough, you can add your functionality to the Linx solution. &lt;/p&gt;

&lt;p&gt;If you want to try building an API with Linx, you can try it yourself &lt;a href="https://linx.software/postman-to-production/"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>rest</category>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Another way to provide data via web-apps (an MDS alternative)</title>
      <dc:creator>Shantoie Vorster</dc:creator>
      <pubDate>Mon, 01 Aug 2022 09:12:24 +0000</pubDate>
      <link>https://dev.to/shantoie/another-way-to-provide-data-via-web-apps-an-mds-alternative-4kgh</link>
      <guid>https://dev.to/shantoie/another-way-to-provide-data-via-web-apps-an-mds-alternative-4kgh</guid>
      <description>&lt;p&gt;Making data available via a front-end can be a headache when your &lt;em&gt;(back-end)&lt;/em&gt; team is busy with other high-priority tasks. It can be an even greater challenge when there are requests to update specific records or to allow specific users to have access to change very specific fields. MDS is always an option, but it has some limitations and availability constraints. &lt;/p&gt;

&lt;p&gt;Let's say we need to make data available for our users. Some users need to be able to simply view it, and others need access to update certain fields. What if our users also want some bespoke functionality that we need to add in such as validations, business rules or simply notifications that fields were updated? &lt;/p&gt;

&lt;p&gt;This bespoke functionality can go beyond just data, for example, what if our user needs to upload a file that needs to be loaded via a back-end process? &lt;/p&gt;

&lt;h2&gt;
  
  
  MDS Alternatives
&lt;/h2&gt;

&lt;p&gt;MDS or similar alternatives will not easily suit our needs with regard to the above-mentioned scenario. We can opt to create a bespoke single-page application (SPA) via a popular web framework, but this can be costly, time intensive and come with a high skill requirement. &lt;/p&gt;

&lt;p&gt;Another option is to turn to a low-code alternative, like &lt;a href="https://stadium.software/stadium-6-is-live/"&gt;Stadium&lt;/a&gt;, to speed up our development. There are many other options available, but I found that Stadium offers the tools that I need to make data available, add bespoke functionality and do it all with little front-end development knowledge. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I6qTBi6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uuic2r6beyyj4ro7873x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I6qTBi6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uuic2r6beyyj4ro7873x.gif" alt="A gif that shows how low-code can be used to create an MDM like site" width="600" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make data available fast
&lt;/h2&gt;

&lt;p&gt;The goal of any MDM-like tool is to make data available for users to interact with quickly. With &lt;a href="https://stadium.software/"&gt;Stadium&lt;/a&gt;, I was able to do so in a few clicks. I could also make a simple editor by combining SQL scripts (generated by Stadium with some amendments) for a row of data. This highlights that it is possible to create dynamic and rich user experiences with Stadium. The below gif illustrates what I was able to do in a few clicks: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SX3o9D75--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ujbuggxepyf04oct5bv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SX3o9D75--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ujbuggxepyf04oct5bv.gif" alt="A gif that shows " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  More than just data availability
&lt;/h2&gt;

&lt;p&gt;A big trap that I have personally fallen into is to force a tool like MDS to do things that it is not made for, such as kick-off processes. I am a big fan of the ‘tool for every job’ mentality. Using the right tool to create a bespoke screen that can upload files, kick off processes or act as a data dashboard is very important, but finding the right tool that can integrate all these tasks can be a challenge. &lt;/p&gt;

&lt;p&gt;This is where I feel that Stadium does a good job. It allows you to create web applications without restricting you to a specific path. You can create a simple application that will replace or enhance your MDS functionality, you can create dashboards, create pages that will assist users with business processes or create a file management system where users can upload and maintain files to be loaded into the database via your back-end processes. Stadium also works great with any back-end, but I highly recommend trying &lt;a href="https://linx.software/"&gt;Linx&lt;/a&gt; with Stadium.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Making data available to your users via a front-end can be a bit of a headache when you do not have the tools or skillset to do so. &lt;a href="https://stadium.software/"&gt;Stadium&lt;/a&gt; and tools like it can speed up front-end development, helping with those tight deadlines. Just be sure that the low-code tool you select is correct for what you are trying to accomplish.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QfEaPL4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g548iyskxmmyp10svn73.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QfEaPL4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g548iyskxmmyp10svn73.gif" alt="A gif showing how Stadium works and how it can be used to create an MDS like front-end" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read more on the latest Stadium release &lt;a href="https://stadium.software/stadium-6-is-live-%f0%9f%9a%80/"&gt;here&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>mds</category>
      <category>stadium6</category>
      <category>lowcode</category>
      <category>frontend</category>
    </item>
    <item>
      <title>A better way to import files</title>
      <dc:creator>Shantoie Vorster</dc:creator>
      <pubDate>Mon, 18 Jul 2022 12:15:24 +0000</pubDate>
      <link>https://dev.to/shantoie/a-better-way-to-import-files-46pg</link>
      <guid>https://dev.to/shantoie/a-better-way-to-import-files-46pg</guid>
      <description>&lt;p&gt;When I was a junior developer I always wanted to find new and complex ways to do things. There was a strong urge to follow the path of most resistance because it seemed to be the ‘coolest’ way to do something. At this stage, a very wise and tired senior developer told me this: ‘In your career, you are going to write 1000 processes that import a file, at some point, you will realise that seniority is not about the coolest way to do things, but the easiest and most efficient way.’ This conversation always echos through my mind, how can I make things easier? &lt;/p&gt;

&lt;p&gt;This is why low-code is so appealing to me, it allows users to create applications much faster than pro-code. Not to say that pro-code is bad in any way, but if I only have an hour to create a process that will import a file, test it, and get it to UAT by the close of business, low-code tools are a no-brainer. (I did an article on the viability of Low-Code for developers if you want to read more)&lt;br&gt;
Creating a File Reader with low-code&lt;br&gt;
In a recent post, I explored just this very rudimentary task that will be done by most, if not all, IT departments: Importing a file and making the data available elsewhere. I decided I wanted to make the data available via REST API. &lt;br&gt;
By using my low-code tool of choice, Linx, I was able to develop this very simple process in less than 15 minutes. Another 30 minutes and I could add in logging, and error handling and add a layer of polish. I suppose time will have to be allocated to testing and deployment as well, but you get the idea, we are saving quite a substantial amount of time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5MDQ-W3Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/osmaj0fmszwe1cffcg9y.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5MDQ-W3Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/osmaj0fmszwe1cffcg9y.gif" alt="FileReaderProcess_Preview" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Understanding what you are getting into&lt;br&gt;
Many like to point out that low-code has many pitfalls and limitations, and that it will never truly replace pro-code or conventional coding tools. I agree with this sentiment, it's hard to think of a world without pro code. There are too many bespoke systems and specific problems that need solving. That said, we can utilize these tools to optimize some of the more ‘ordinary’ development tasks such as loading a file.&lt;br&gt;
That said, we need to be very careful in picking a low code tool, it needs to fulfil our needs and we need to ensure that it does not lock us into its own environment when we need to have freedom.&lt;br&gt;
What I am trying to say is that you need to choose a platform that will meet your (and your organisational) requirements and needs. &lt;/p&gt;

&lt;p&gt;The right tool for the job&lt;br&gt;
When choosing a low-code tool, make sure that you are choosing the right tool for the job. Ensure that you are not choosing a front-end tool to do back-end tasks. It might work, but why do we want to use a spoon when we need to use a ladle. For back-end applications, I like to use Linx. Not just because I am employed by the company that makes Linx, but also because I have seen it in action. I have seen it used to create intricate back-end systems in massive enterprise environments. &lt;/p&gt;

&lt;p&gt;If you are interested in reading more about how I created the above-mentioned process so quickly, feel free to read the post here. There is also a YouTube video that has all the steps.&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>filereader</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
