OLP—A RESTful Open Low-Code Platform
Abstract
:1. Introduction
- An in-depth review of the state of the art on low-code and no-code platforms;
- Presentation of low-code functional and nonfunctional requirements;
- Proposal of an architecture for low-code development platforms;
- Proposal, demonstration, and validation of OLP (Open Low-Code Platform), a low-code solution that enables regular users to create applications;
- Invaluable lessons learned throughout the project.
2. No-Code, Low-Code, and Traditional Approaches
3. Low-Code Platform Requirements and Architecture
3.1. Nonfunctional Requirements
- (1)
- Ease of use: Since the primary goal of this type of software is to simplify software development, platforms should be intuitive to handle. In practice, intuitive means that users should be able to develop applications with minimal training and effort. This low complexity is achieved by replacing traditional source code with visual representations that allow users to manipulate system elements graphically instead of textually. This crucial change is associated with a concept known as visual programming, allowing developers to focus on software functionalities, and it is also good for educational purposes [13].
- (2)
- Flexibility: Since this software enables users to build other software easily, the platform must be intuitive. Nevertheless, it should support advanced use-cases and this is only possible if the platform provides a degree of flexibility to users.
- (3)
- Extensibility: The platform should provide tools or documentation that allow users to refine or extend the provided functionalities through plugins or other contributions. This feature is essential because, no matter how flexible the solution is, it is unlikely to attend to all use-cases.
- (4)
- Interoperability: This software should be able to integrate with external systems [14]. Today, integration with other solutions is generally accomplished through representational state transfer (REST) application programming interfaces (APIs).
- (5)
- Security: It is common for programmers to have almost unlimited access inside an organization and with access to privileged information (in smaller organizations, this is even more common). Therefore, low-code platforms should provide security mechanisms that can limit access to the source code and allow accountability. In addition, similar security mechanisms should be easily applied to the developed software, allowing profile access and methods to encrypt fields within a database securely.
- (6)
- Privacy: The concept of privacy is tightly linked to security because it focuses on methods and purposes of storing, analyzing, and sharing data by a service provider. For example, a recent privacy controversy was sparked by WhatsApp, which started sharing user data with its parent company Facebook. Users were fearful that their private conversations would be shared and used for targeted advertisement within Facebook, Instagram, or other third parties. Facebook later reiterated that not even WhatsApp could access private conversations due to end-to-end encryption, which meant that such a scenario would not be possible. Knowing which data are shared and how data are stored could be especially useful in a data breach, because various data could be compromised directly or indirectly. The General Data Protection Regulation (GDPR) from Europe [15] and the California Consumer Privacy Act (CCPA) from California, USA [16] are examples of privacy protection legislation.
- (7)
- Scalability: The platform should provide tools or be compatible with tools that allow software to scale vertically and horizontally, adapting to the ever-increasing demands. Vertical scaling consists of running a solution in hardware with more resources (memory, HDD, CPU cores, and processing power) [17]. Horizontal scaling is characterized by distributing the workload through various hardware [18]; instead of having a single server with powerful capabilities, the workload is distributed among several servers.
- (8)
- Maintainability: Low-code platforms are constantly updated by their developers, which means that a platform should be constructed in a way that is easy to maintain. Maintainability is an attribute that describes the simplicity of modifying, fixing bugs, or improving the performance in a software solution.
- (9)
- Backwards compatibility: Low-code platforms continuously iterate and improve themselves, especially regarding usability, while trying to not being so strict that too much flexibility is lost. When visual code becomes incompatible with its previous implementation, the platform should automatically upgrade it to end-users. When done correctly, even visual code from version 2 of a platform that is incompatible with version 6 can be upgraded to version 3, which can be upgraded to version 4, and so on.
3.2. Functional Requirements
- (1)
- Data management and event management: A software should allow “create, read, update, and delete” (CRUD) operations performed using a database or an external API. When manipulating data directly from a database, users should be able to perform advanced database query operations. These operations will generally require users to write Structured Query Language (SQL) or even NoSQL statements. Furthermore, modern systems usually execute or respond to various events automatically, according to the received data, and the platform should also provide such as a feature.
- (2)
- Code transpiling: Since the source code consists of visual representations instead of the traditional text, visual representations must be translated into a textual source code. Then, it can be written in any programming language chosen by the platform developers and should be compiled or interpreted depending on the chosen programming language.
- (3)
- Correctness: The generated textual source code should not contain errors or bugs, since most platforms do not offer users the source code. Thus, users will not be able to edit code that is generated by the platform. This is valid for all the coding aspects, including a REST API or a script to generate a database.
- (4)
- Code optimization: The generated code should be optimized because, otherwise, the software that it produces might be difficult to scale. Moreover, the generated source code should be easily readable by the platform developers because it is likely they will need to review it in the future.
- (5)
- Code verification: All the generated code should be verifiable through automated tests. This is valid for the platform itself (when it is being built or modified by developers), s well as for end-users. The developers need to use or build code verification tools because modifications to platform code can change internal functionalities and negatively impact functionalities for the application end-users. The platform should also provide similar tools for the end-users so they can verify their functionalities, detecting bugs of their own doing, as well as bugs in the sequence of platform updates. Furthermore, automated testing is a good practice in software development that saves time in the long run and ensures product quality [19].
- (6)
- Code compiling/interpreting: After the transpiled source code is verified as being correct and optimized, it should be compiled or interpreted depending on the programming language. This is a necessary step in most programming languages because, otherwise, running the application will not be possible.
- (7)
- Application deployment: Deployment is a process that makes a software available to its end-users and can vary depending on the targeted end-user. In a mobile application, a deployment could mean publishing the software on an App store or running the application on a smartphone. In Web applications, it could mean running on a local computer or on a cloud server.
- (8)
- Produce adequate messages: A big part of programming is the textual output produced by compilers, which is generally categorized by (i) information, (ii) warnings, and (iii) errors. These textual outputs are essential because they give the programmer important feedback regarding their code. Generally, errors mean that the code will not compile, and warnings imply that some aspects could be optimized or might not work as expected. An example of a warning or error (depends on the compiler) could be the following: variable bar in function foo (Float bar) expects a Float but receives an Integer when called. The previous example is not a suitable warning because there is no reference to the file where the error occurred or the line it refers to. Since low-code movement goals to facilitate programming, the location where the errors or warnings occur should be easy to identify, and the user should be able to easily interpret them.
- (9)
- Debugging functionalities: Even the best software presents bugs, and debuggers enable software developers to identify and remove the source of such bugs. Furthermore, debuggers allow software to run in a completely controlled environment. In practice, this means that each line of code can only be executed after programmer presses a button. In addition, the debugging process enables developers to identify and monitoring changes in various resources such as variables and should be avoided in production environments.
- (10)
- Visual-code export/import: The visual code that developers use should be easily exported (saved), enabling users to import it (load) without losing functionalities.
- (11)
- Textual code writing: Low-code platforms should offer ways to manually write source code because it is one of its core functionalities (minimize code-writing, but not eliminate it). However, allowing developers to write traditional source code, the platform should also have a well-defined syntax and semantic.
- (12)
- Versioning and collaborative development: Most software developers verify the impacts of their code changes immediately and, with low-code, this aspect will be the same. In visual programming, it could be easy to modify or remove visual code blocks and lose functionality, which could worsen if the erased block contains textual code. Therefore, these platforms should provide version control so that developers can go back to a previous version. Furthermore, version control allows multiple developers to simultaneously work on the same project without breaking each other’s code.
- (13)
- Visual data modeling tools: Users should visually configure and assert constraints when creating entities, their fields, dependencies, and even relationships with other entities.
- (14)
- Visual programming tools: Since low-code programming minimizes code-writing, it should rely on visual representations that allow users to control program elements graphically. Among other aspects, these tools should offer users the ability to represent the most basic aspects of any software: (i) sequences, (ii) selections, and (iii) loops [20]. It consists of a sequence of actions completed in a specified order; in traditional programming, it executes each line in sequential order (e.g., line 5 only executes after lines 1, 2, 3, and 4). Selections formulate questions to decide which subsequent lines to execute. Loops are similar to selections because they continue to formulate questions and execute subsequent code until a specific condition is reached.
3.3. Architecture
- (1)
- Visual application modeler: The front-end of the low-code platform will interact with the developers and simplify software development. The visual application modeler is an enhanced integrated development environment (IDE) that implements most of the functionalities that developers interact with. These include producing code (graphical or textual), debugging, modeling data, code verification, testing, versioning, event management, and many more. The IDE should be simple to use [21], provide a preview of the developed software, and be located at the client side.
- (2)
- Encoder: The “symbols and codes” used in the visual application modeler must be imported and exported without losing functionalities. To achieve such a goal, the “code” produced by the modeler must be expressed in a self-contained representation easily interpreted by an algorithm. This entity encodes the visual representations into a flexible format such as JavaScript Object Notation (JSON) or Extensible Markup Language (XML) that can be transmitted over the Internet. The encoder is located on the client side.
- (3)
- Decoder: This entity interprets the encodings of the visual representations and is located on the server side.
- (4)
- Source code generator: After the data are represented in a human-readable way, they can be transpiled by the source code generator. Transpiling consists of converting the source code from one language to another. This entity should include scripts to generate and interact with a database, and it is also responsible for code correctness, optimization, and verification.
- (5)
- Compiler: This is the entity responsible for compiling the source code, and it also acts as the final code correctness test.
- (6)
- Deployer: This is the entity responsible for deploying the software into a target platform that will interact with end-users.
4. OLP Development and Demonstration
- 1:
- The user exports the project and transforms the visual representations into a format that can be easily encoded and decoded for future usage.
- 2:
- Programming languages generally represent data structures in compilers through a tree data structure because it resembles the production rules for syntax. In the case of the platform, an abstract syntax tree (AST) was chosen to make this representation. On the scripting side (left side) of the pipeline, the AST may contain strings because, even though it is a scripting language, a user is free to type any expression in text boxes. These expressions typed by the users must be parsed before being converted into a pure AST. The other side of the tree is already in the correct format as the visual representations can be converted directly into objects. In the UI (right side) of the pipeline, the tree is already assembled in the correct format because the user cannot type custom HTML.
- 3:
- The AST is converted to JSON because the AST needs to be represented in a format that humans can understand, enabling faster debugs. Then, an HTTP request is made to the compiler, where the encoded JSON is sent to the compiler.
- 4:
- The compiler receives the JSON containing the encoded AST, as well as other project data (name, the user who created it, settings, and other files).
- 5:
- On the logic side (left side of the pipeline), the JSON is decoded normally, except in the parts that were typed by the user; these are not verified by the IDE and need to be analyzed by the semantic analyzer. The trees are already set up on the UI side (right side of the pipeline); hence, they are converted directly to ASTs.
- 6:
- On the logic side (left side of the pipeline), the semantic analyzer places data type information in the tree. It also looks at some other inconsistencies and generates warnings. This step is exclusive to logic.
- 7:
- On the logic side (left side of the pipeline), the transpiler converts the AST from step 6 into a JavaScript AST. Aspects such as data types that are supported by the platform but do not explicitly exist in Javascript are converted in this step.
- 8:
- The pretty-printer transforms ASTs into a styled and formatted source code that is easier to read. The source code is formatted and styled for the sole purpose of faster debugs, and it is the same on both sides of the pipeline.
- 9:
- The linker references the CSS and javascript files in the HTML and compresses them into a Zip file.
Demonstration
5. Learned Lessons
6. Conclusions and Future Works
Author Contributions
Funding
Informed Consent Statement
Data Availability Statement
Conflicts of Interest
References
- Waszkowski, R. Low-Code Platform for Automating Business Processes in Manufacturing. IFAC-PapersOnLine 2019, 52, 376–381. [Google Scholar] [CrossRef]
- Sanchis, R.; García-Perales, Ó.; Fraile, F.; Poler, R. Low-Code as Enabler of Digital Transformation in Manufacturing Industry. Appl. Sci. 2019, 10, 12. [Google Scholar] [CrossRef] [Green Version]
- Villegas-Ch., W.; García-Ortiz, J.; Sánchez-Viteri, S. Identification of the Factors That Influence University Learning with Low-Code/No-Code Artificial Intelligence Techniques. Electronics 2021, 10, 1192. [Google Scholar] [CrossRef]
- Sáez-López, J.M.; del Olmo-Muñoz, J.; González-Calero, J.A.; Cózar-Gutiérrez, R. Exploring the Effect of Training in Visual Block Programming for Preservice Teachers. MTI 2020, 4, 65. [Google Scholar] [CrossRef]
- Henriques, H.; Lourenço, H.; Amaral, V.; Goulão, M. Improving the Developer Experience with a Low-Code Process Modelling Language. In Proceedings of the 21th ACM/IEEE International Conference on Model Driven Engineering Languages and Systems, Copenhagen, Denmark, 14–19 October 2018. [Google Scholar] [CrossRef]
- Zaytsev, V. Open challenges in incremental coverage of legacy software languages. In Proceedings of the 3rd ACM SIGPLAN International Workshop on Programming Experience, Vancouver, BC, Canada, 23–27 October 2017. [Google Scholar] [CrossRef]
- Völter, M.; Stahl, T.; Bettin, J.; Haase, A.; Helsen, S. MDSD—Basic idea and terminology. In Model-Driven Software Development, 1st ed.; Tickner, S., Ed.; John Wiley & Sons: Hoboken, NJ, USA, 2006. [Google Scholar]
- Gartner Magic Quadrant for Enterprise Low-Code Application Platforms. Available online: https://www.gartner.com/en/documents/4005939 (accessed on 23 August 2021).
- Woo, M. The Rise of No/Low Code Software Development—No Experience Needed? Engineering 2020, 6, 960–961. [Google Scholar] [CrossRef] [PubMed]
- Ihirwe, F.; Di Ruscio, D.; Mazzini, S.; Pierini, P.; Pierantonio, A. Low-Code Engineering for Internet of Things. In Proceedings of the 23rd ACM/IEEE International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings, Virtual Event, Canada, 18–23 October 2020. [Google Scholar] [CrossRef]
- Bucchiarone, A.; Ciccozzi, F.; Lambers, L.; Pierantonio, A.; Tichy, M.; Tisi, M.; Wortmann, A.; Zaytsev, V. What Is the Future of Modeling? IEEE Softw. 2021, 38, 119–127. [Google Scholar] [CrossRef]
- Martins, R.; Caldeira, F.; Sa, F.; Abbasi, M.; Martins, P. An Overview on How to Develop a Low-Code Application Using OutSystems. In Proceedings of the 2020 International Conference on Smart Technologies in Computing, Electrical and Electronics (ICSTCEE), Bengaluru, India, 9–10 October 2020. [Google Scholar] [CrossRef]
- Broll, B.; Lédeczi, A.; Volgyesi, P.; Sallai, J.; Maroti, M.; Carrillo, A.; Weeden-Wright, S.L.; Vanags, C.; Swartz, J.D.; Lu, M. A Visual Programming Environment for Learning Distributed Programming. In Proceedings of the 2017 ACM SIGCSE Technical Symposium on Computer Science Education, Seattle, WA, USA, 8–11 March 2017. [Google Scholar] [CrossRef] [Green Version]
- Sahay, A.; Indamutsa, A.; Di Ruscio, D.; Pierantonio, A. Supporting the Understanding and Comparison of Low-Code Development Platforms. In Proceedings of the 2020 46th Euromicro Conference on Software Engineering and Advanced Applications (SEAA), Portoroz, Slovenia, 26–28 August 2020. [Google Scholar] [CrossRef]
- Barati, M.; Rana, O.; Petri, I.; Theodorakopoulos, G. GDPR Compliance Verification in Internet of Things. IEEE Access 2020, 8, 119697–119709. [Google Scholar] [CrossRef]
- Stallings, W. Handling of Personal Information and Deidentified, Aggregated, and Pseudonymized Information Under the California Consumer Privacy Act. IEEE Secur. Priv. 2020, 18, 61–64. [Google Scholar] [CrossRef]
- Arteaga, C.H.T.; Anacona, F.B.; Ortega, K.T.T.; Rendon, O.M.C. A Scaling Mechanism for an Evolved Packet Core Based on Network Functions Virtualization. IEEE Trans. Netw. Serv. Manag. 2020, 17, 779–792. [Google Scholar] [CrossRef]
- Gouareb, R.; Friderikos, V.; Aghvami, A.H. Placement and Routing of VNFs for Horizontal Scaling. In Proceedings of the 2019 26th International Conference on Telecommunications (ICT), Hanoi, Vietnam, 8–10 April 2019. [Google Scholar] [CrossRef]
- Khorram, F.; Mottu, J.-M.; Sunyé, G. Challenges & Opportunities in Low-Code Testing. In Proceedings of the 23rd ACM/IEEE International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings, Virtual Event, Canada, 18–23 October 2020. [Google Scholar] [CrossRef]
- Mouradian, C.; Kianpisheh, S.; Glitho, R.H. Application Component Placement in NFV-Based Hybrid Cloud/Fog Systems. In Proceedings of the 2018 IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN), Washington, DC, USA, 25–27 June 2018. [Google Scholar] [CrossRef] [Green Version]
- Manso, A.; Marques, C.G.; Santos, P.; Lopes, L.; Guedes, R. Algorithmi IDE—Integrated Learning Environment for the Teaching and Learning of Algorithmics. In Proceedings of the 2019 International Symposium on Computers in Education (SIIE), Tomar, Portugal, 21–23 November 2019. [Google Scholar] [CrossRef]
- GitHub—Heitor-Lassarote/Iolp: Inatel Open Low-Code Platform. Available online: https://github.com/heitor-lassarote/iolp (accessed on 29 July 2021).
No-Code Characteristics | Low-Code Characteristics |
---|---|
Removes code-writing | Reduces code-writing |
Low freedom for personalization | High freedom for personalization |
Easier learning curve when compared to traditional programming | |
Visual application development | |
Code optimization | |
Any person within an organization can build software | |
Hosting and/or licensing costs | |
Generally hides the true source code from the user | |
Less knowledgeable or inexperienced developers are likely to create vulnerabilities due to the ease of creating applications |
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations. |
© 2021 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).
Share and Cite
da Cruz, M.A.A.; de Paula, H.T.L.; Caputo, B.P.G.; Mafra, S.B.; Lorenz, P.; Rodrigues, J.J.P.C. OLP—A RESTful Open Low-Code Platform. Future Internet 2021, 13, 249. https://doi.org/10.3390/fi13100249
da Cruz MAA, de Paula HTL, Caputo BPG, Mafra SB, Lorenz P, Rodrigues JJPC. OLP—A RESTful Open Low-Code Platform. Future Internet. 2021; 13(10):249. https://doi.org/10.3390/fi13100249
Chicago/Turabian Styleda Cruz, Mauro A. A., Heitor T. L. de Paula, Bruno P. G. Caputo, Samuel B. Mafra, Pascal Lorenz, and Joel J. P. C. Rodrigues. 2021. "OLP—A RESTful Open Low-Code Platform" Future Internet 13, no. 10: 249. https://doi.org/10.3390/fi13100249
APA Styleda Cruz, M. A. A., de Paula, H. T. L., Caputo, B. P. G., Mafra, S. B., Lorenz, P., & Rodrigues, J. J. P. C. (2021). OLP—A RESTful Open Low-Code Platform. Future Internet, 13(10), 249. https://doi.org/10.3390/fi13100249