# Developing Microservice-Based Applications Using the Silvera Domain-Specific Language
## 1 Introduction
Due to this, the system's architecture deviates from the original design over time. The main contributions of this paper are as follows:  
* We present _Silvera_, a Domain-Specific Language (DSL) (DSLs are expressive languages tailored for a specific domain [12] (see Section 2.3)) and an extensible code generator framework that aims to accelerate the development of microservices. * We present a case study that shows that DSLs significantly accelerate the development of MSA (Section 5.7.1). * We also provide a description of the development process (Section 3.1) and the study to assess the language based on quality characteristics defined by A Framework for Qualitative Assessment of DSLs (FQAD) [13]. _Silvera_ aims to satisfy the following: (i) the language is easy to use for both domain experts and beginners, (ii) it supports well-known MSA design patterns as first-class concepts, (iii) it supports heterogeneous technology stacks through an extensible code generators framework, (iv) it provides automatic generation of architecture diagrams and OpenAPI documentation, and (v) it uses microservice-tailored metrics to evaluate the architecture of the designed system. To assess the feature set of Silvera, we compare it to similar available tools and frameworks in Section 2.4. The development process of Silvera, design decisions, used development patterns, and the language abstract and concrete syntaxes are described in Section 3. Silvera is based on well-established principles of Model-Driven Engineering (MDE) which promote the active use of models throughout the software development process, leading to an automated generation of the final application. The models can be defined using general-purpose modeling languages (such as the UML), but DSLs are often used for restricted, well-known domains. Users can use Silvera to _model_ microservice-based systems and _automatically_ translate models into working applications. The transformation of the specification to a runnable code is performed by the compiler. The compiler supports an arbitrary number of code generators where each code generator produces code for a corresponding programming language and/or framework. To better explain the language usage, we investigate building a small MSA application in Section 4 that serves as a short demonstration of Silvera's capabilities. Even though small, the application is complete and demonstrates the implementation of almost all design patterns supported in Silvera. The application model contains definitions of microservices, their respective APIs, domain models, and description of inter-service communication. Furthermore, to evaluate Silvera's quality characteristics, we conducted a survey based on RQAD where we focused on the following DSL characteristics: functional suitability, usability, reliability, productivity, extendability, and expressiveness. The results of the study and its limitation are discussed in Sections 5-7. Silvera is a free and open-source project, and it is hosted on GitHub (Silvera project--[[https://github.com/alensuljkanovic/silvera](https://github.com/alensuljkanovic/silvera)]([https://github.com/alensuljkanovic/silvera](https://github.com/alensuljkanovic/silvera)) (accessed on 1 June 2022)). The remainder of the paper is organized as follows. Section 2 presents related work. Section 3 presents the implemented language, whereas Section 4 shows how Silvera can be used during the implementation of microservice-based applications. Section 5 presents results of the evaluation of Silvera language. Threats to validity are shown in Section 6. Section 7 discussed the limitations of the current approach and implementation. Section 8 concludes the paper and discusses future improvements of Silvera.