All Projects → Microservice-API-Patterns → MDSL-Specification

Microservice-API-Patterns / MDSL-Specification

Licence: Apache-2.0 license
A domain-specific language to specify (micro-)service contracts, data representations and endpoints.

Programming Languages

java
68154 projects - #9 most used programming language
FreeMarker
481 projects
Xtend
68 projects

Projects that are alternatives of or similar to MDSL-Specification

ltest
A Testing Framework for LFE (successor to lfeunit)
Stars: ✭ 31 (-11.43%)
Mutual labels:  integration
apidox
Generate node.js module API markdown with dox
Stars: ✭ 14 (-60%)
Mutual labels:  api-documentation
awesome-programming-books
List of good programming books for beginners and professionals
Stars: ✭ 68 (+94.29%)
Mutual labels:  patterns
reedelk-runtime
Reedelk Runtime Platform Community Edition
Stars: ✭ 25 (-28.57%)
Mutual labels:  integration
ACCESS-NYC-PATTERNS
ACCESS NYC Pattern library and design system documentation for https://access.nyc.gov. Maintained by @NYCOpportunity
Stars: ✭ 14 (-60%)
Mutual labels:  patterns
integreat-cms
Simplified content management back end for the Integreat App - a multilingual information platform for newcomers
Stars: ✭ 46 (+31.43%)
Mutual labels:  integration
cgol
Conway's Game of Life in the Terminal
Stars: ✭ 32 (-8.57%)
Mutual labels:  patterns
mail2most
watch emails and send them to mattermost
Stars: ✭ 54 (+54.29%)
Mutual labels:  integration
unofficial-documentation
solved.ac API를 문서화하는 커뮤니티 프로젝트
Stars: ✭ 38 (+8.57%)
Mutual labels:  api-documentation
flutter getx template
🍻🍀 This is source base for getx flutter. Optimize by lambiengcode
Stars: ✭ 43 (+22.86%)
Mutual labels:  patterns
DiffEqUncertainty.jl
Fast uncertainty quantification for scientific machine learning (SciML) and differential equations
Stars: ✭ 61 (+74.29%)
Mutual labels:  integration
InternalSteamWebAPI
Documenting the unofficial and internal Steam Web API
Stars: ✭ 126 (+260%)
Mutual labels:  api-documentation
ghidra-r2web
Ghidra plugin to start an r2 webserver to let r2 interact with it
Stars: ✭ 38 (+8.57%)
Mutual labels:  integration
Dynatrace-OneAgent-Ansible
This Ansible role installs Dynatrace OneAgent.
Stars: ✭ 34 (-2.86%)
Mutual labels:  integration
apitest
this is a tool for testing Laravel REST API
Stars: ✭ 11 (-68.57%)
Mutual labels:  api-documentation
neo4j-jdbc
JDBC driver for Neo4j
Stars: ✭ 110 (+214.29%)
Mutual labels:  integration
openapi-viewer
Browse and test a REST API described with the OpenAPI 3.0 Specification
Stars: ✭ 85 (+142.86%)
Mutual labels:  api-documentation
alt-rails
Design/Arquitectural patterns for big Rails applications
Stars: ✭ 32 (-8.57%)
Mutual labels:  patterns
one-sdk-js
1️⃣ One Node.js SDK for all the APIs you want to integrate with
Stars: ✭ 41 (+17.14%)
Mutual labels:  integration
FractionalCalculus.jl
FractionalCalculus.jl: A Julia package for high performance, fast convergence and high precision numerical fractional calculus computing.
Stars: ✭ 22 (-37.14%)
Mutual labels:  integration

Microservice Domain-Specific Language (MDSL)

License

Author: Olaf Zimmermann, (c) 2018-2022. All rights reserved.

What is MDSL?

MDSL supports the API Description pattern from Microservice API Patterns (MAP) ("polyglot service design").

This is the "hello world" of cross-platform service contracting, specified in MDSL:

API description HelloWorldAPI

data type SampleDTO {ID, "someData": D<string>} 

endpoint type HelloWorldEndpoint
exposes 
  operation sayHello 
    expecting payload D<string>  
    delivering payload SampleDTO

API provider HelloWorldAPIProvider
  offers HelloWorldEndpoint at endpoint location "http://localhost:8080"
  via protocol HTTP binding resource Home at "/hello"

As the example shows, the MDSL grammar defines two related specification languages:

  1. An API description language: API endpoints types (a.k.a. service contracts types) can be defined, including their operations; API client and providers of instances of these endpoint types can be specified elaborately, including Service Level Agreements (SLAs).
  2. A data contract language providing a type system for DTRs in request and response messages (which is very compact): data type SampleDTO {ID, "someData": D<string>}. This type definition pairs an ID (without a name) with some string data.

These two languages can be used independently of each other; for instance, data contracts for operations in contract types can also be specified in JSON Schema (or XML Schema). Specifications do not have to be complete to be useful (e.g., in early stages of service design); tools will be expected to check that, use defaults, etc.

Getting Started

Language Specification

The Primer is a good starting point. Detailed are explained on reference pages:

A Quick Reference providing reusable snippets is available as well.

Repository Structure

This repository contains:

If you want to contribute to MDSL, you have to clone this repo and generate the required Xtext files.

Note: The project has to be imported as an existing Maven project, and an adjustment of the IDE setup is required. The readme of the main project contains detailed instructions. This setup and build process eases integration with Context Mapper.

Change Log

The latest version of the MDSL language MDSL version extends service contracts with support for events, states, compensation as well as integration scenarios as stories(as experimental technology previews). These concepts are featured in a number of model transformations that support rapid "API First" development.

Since Version 5.2, MDSL supports true REST level 3 concepts both on the abstract endpoint type level and in the redesigned bindings and comes with additional Freemarker generators (Markdown reports, ALPS).

The Change Log provides an evolution history; the GitHub Release Notes also contain update information.

Context Information: MAP and Xtext

All Microservice API Patterns (MAP) are supported and integrated one way or another:

  • As grammar rules
  • As enums for roles and responsibilities
  • As stereotypes annotating representation elements

See "MAP Decorators" section of the MDSL tutorial for more information.

The MDSL grammar, located in the src folder of the dsl-core/io.mdsl project, was originally developed with Eclipse Photon (4.8.0) and Xtext (2.14) as provided by the Eclipse Modeling Platform. MDSL makes use of the referencing feature in Xtext ('name' attribute).

Feedback and contributions welcome!

ZIO (a.k.a. socadk)

Acknowledgements

Contributors (input, DevOps support, feedback):

  • Giacomo De Liberali (AsyncMDSL language, AsyncAPI generator)
  • Stefan Kapferer (also the author of the MDSL generator in Context Mapper)
  • MAP co-authors: Mirko Stocker, Daniel Lübke, Cesare Pautasso, Uwe Zdun
  • Bachelor/master students at HSR/OST
  • Microservices 2019 and VSS 2019 conference participants
  • Early adopters and reviewers

The creation and release of MDSL 4 in 2020 was supported by the Hasler Foundation.

Getting involved

We are happy to welcome new contributors who want to help improve MDSL language and tools:

  • Feel free to create issues in GitHub.
  • Submit pull requests. If you do so, we assume that you comply with this Developer Certificate of Origin.
  • Contact us to discuss collaboration and integration opportunities.

-- Olaf Zimmermann (ZIO)

Copyright: The author, 2019-2022. All rights reserved. See license information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].