Please use this identifier to cite or link to this item: https://hdl.handle.net/10216/83537
Author(s): Filipe Rui Rocha Oliveira
Title: Exploring the Scala Macro System for Compile Time Model-Based Generation of Statically Type-Safe REST Services
Issue Date: 2015-07-20
Abstract: The amount of web services has increased dramatically over the past years due to the growth of mobile applications that use them, and to the business potential that they offer (e.g. Google Maps API, Facebook API). REpresentational State Transfer (REST) is a prolific architectural style used as an interface to these web services, mainly due to its better performance (when compared to other techniques like SOAP), scalability and simplicity. Some common usages of this style include the simple manipulation of structured data, by using default behaviours that are based on user defined models and which provide default CRUD operations. Known implementations are Django RESTframework, Eve, Sails, and the LoopBack framework.These frameworks apply the models' logic in run-time usually using reflection or in-memory data structures, and are commonly written in programming languages that are based on (or at least optionally support) dynamic type systems. Although easier to write and more flexible, such technical choices usually hinder two software quality attributes: performance (due to run-time adaptation) and maintainability (due to absence of compile-time guarantees).Assuming such observations and potential shortcomings, the obvious follow-up would be to explore more efficient (and correct) solutions, by interpreting the models at compile-time using a programming language with a sufficiently powerful static and extendable type system. Scala meetsthese requirements, while still providing enough flexibility to developers looking for it in this kind of framework. With that in mind the this work aimed to explore the design and implementation of such frameworks using the Scala Macro System.The result of this research was materialized in the Metamorphic framework, which by using a semantically rich DSL is capable of generating an entire application from data storage to services logic. Such generated applications mostly contain components of well known and tested libraries, following either an interface or a model.Evaluation was executed by performing both quantitative benchmarks and qualitative analysis of Metamorphic against other frameworks.
Description: A quantidade de serviços web tem crescido dramaticamente nos últimos anos devido ao crescimento de aplicações móveis que os usam, e ao potencial de negócio que representam (por exemplo Google Maps API, Facebook API). REpresentational State Transfer (REST) é um promissor estilo arquitetural usado como interface para estes serviços web, principalmente devido à sua melhor performance(quando comparado com outras técnicas como SOAP), escalabilidade e simplicidade. Alguns usos comuns deste estilo são a simples manipulação de estruturas de dados, usando comportamentos por omissão baseados em modelos e que implementam operações CRUD. As frameworks Django REST, Eve, Sails and LoopBack são exemplos de tal.Estas frameworks aplicam a lógica associada aos modelos em tempo de execução usando refleção ou estruturas de dados em memória, e são normalmente implementadas em linguagens de programação que são baseadas (ou pelo menos suportam) sistemas de tipos dinâmicos. Apesar de permitirem uma escrita mais rápida e flexível, tais questões técnicas levam à degradação de dois aspetos da qualidade do software: performance (devido à adaptação em tempo de execução) e manutenção (devido à falta de garantias em tempo de compilação).Assumindo tais observações e potenciais desvantagens, o caminho óbvio seria explorar soluções mais eficientes (e corretas), interpretando os modelos em tempo de compilação e usando uma linguagem de programação com sistema de tipos estático, poderoso e extensível. Scala vai de encontro com estes requisitos, para além de que providencia uma flexibilidade que programadores normalmente procuram neste tipo de frameworks. Sendo assim, este trabalho procurou explorar o desenho e implementação frameworks do género usando o sistema de macros de Scala.O resultado desta investigação foi materializado na framework Metamorphic, que através de uma DSL semanticamente rica é capaz de gerar uma aplicação inteira desde o armazenamento de dados até à lógica dos serviços. As aplicações geradas são compostas maioritariamente por componentes de bibliotecas, bem conhecidas e testadas, que implementam alguma interface ou estam de acordo com algum modelo.A avaliação foi efetuada através de testes quantitativos (performance) e testes qualitativos que colocam frente a frente a framework Metamorphic e todas as outras do género.
Subject: Engenharia electrotécnica, electrónica e informática
Electrical engineering, Electronic engineering, Information engineering
Scientific areas: Ciências da engenharia e tecnologias::Engenharia electrotécnica, electrónica e informática
Engineering and technology::Electrical engineering, Electronic engineering, Information engineering
TID identifier: 201303345
URI: https://repositorio-aberto.up.pt/handle/10216/83537
Document Type: Dissertação
Rights: openAccess
License: https://creativecommons.org/licenses/by-nc/4.0/
Appears in Collections:FEUP - Dissertação

Files in This Item:
File Description SizeFormat 
35426.pdfExploring the Scala Macro System for Compile Time Model-Based Generation of Statically Type-Safe REST Services1.55 MBAdobe PDFView/Open


This item is licensed under a Creative Commons License Creative Commons