NeoIDL: A Domain Specific Language for Specifying REST Contracts Detailed Design and Extended Evaluation

Service-oriented computing has emerged as an effective approach for integrating business (and systems) that might spread throughout different organizations. A service is a unit of logic modularization that hides implementation details using well-defined contracts. However, existing languages for contract specification in this domain present several limitations. For instance, both WSDL and Swagger use language-independent data formats (XML and JSON) that are not suitable for specifying contracts and often lead to heavyweight specifications. Interface description languages, such as CORBA IDL and Apache Thrift, solve this issue by providing specific languages for contract specifications. Nevertheless, these languages do not target to the REST architectural style and lack support for language extensibility. In this paper we present the design and implementation of NeoIDL, an extensible domain specific language and program generator for writing REST based contracts that are further translated into service’s implementations. In addition, we also present a systematic evaluation of our approach from different perspectives, which involved the implementation of different services using NeoIDL from the domain of Command & Control. In particular, we found initial evidences that shows that NeoIDL can contribute: (i) to bring return on investment with respect to the design and development of NeoIDL, after the implementation of 4 to 7 services; and (ii) to reduce significantly the number of lines of specification when compared to an existing service specification language such as Swagger.

[1]  Aarne Ranta Implementing Programming Languages. an Introduction to Compilers and Interpreters , 2012 .

[2]  Paul Hudak,et al.  Building domain-specific embedded languages , 1996, CSUR.

[3]  Mark P. Jones,et al.  Functional Programming with Overloading and Higher-Order Polymorphism , 1995, Advanced Functional Programming.

[4]  Krzysztof Czarnecki,et al.  Generative programming - methods, tools and applications , 2000 .

[5]  Marc J. Hadley,et al.  Web application description language (WADL) , 2006 .

[6]  David Alex Lamb,et al.  IDL, Interface Description Language , 1981 .

[7]  Marko Becker,et al.  Service Oriented Architecture Concepts Technology And Design , 2016 .

[8]  Richard E. Hayes,et al.  Understanding Command and Control , 2011 .

[9]  Cesare Pautasso,et al.  SOA with REST - Principles, Patterns and Constraints for Building Enterprise Solutions with REST , 2013, The Prentice Hall service technology series.

[10]  Erik Christensen,et al.  WSDL: Web Service Description Language , 2001 .

[11]  Robert E. Park,et al.  Software Size Measurement: A Framework for Counting Source Statements , 1992 .

[12]  Roy T. Fielding,et al.  Principled design of the modern Web architecture , 2000, Proceedings of the 2000 International Conference on Software Engineering. ICSE 2000 the New Millennium.

[13]  Abe Fettig,et al.  Twisted network programming essentials - event-driven network programming with Python , 2005 .

[14]  M. Slee,et al.  Thrift : Scalable Cross-Language Services Implementation , 2022 .

[15]  Bertrand Meyer,et al.  Applying 'design by contract' , 1992, Computer.

[16]  Albert L. Baker,et al.  Preliminary design of JML: a behavioral interface specification language for java , 2006, SOEN.