Skip to content

Declarative Promise based Node.js framework for REST API with zero dependencies.

License

Notifications You must be signed in to change notification settings

dominion-framework/dominion

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dominion Node.js framework for RESTfull APIs

Dominion Node.js framework for RESTfull APIs

Gitter install size

Declarative Promise based Node.js framework for RESTful API

Installation

npm i @dominion-framework/dominion

Quick start

npx dominion create hello
npm start

This will run Node.js server with demo API's. Open http://localhost:7042/hello to check results and examine generated files in folder components/hello to see how it works.

Documentation

Read full documentation on dominion.js.org.

Features highlight

Clear Endpoints Declaration

module.exports = {

    factory: BooksFactory,

    GET: [
        // books?genre=western
        function (genre = null) {
            return BooksFactory.find({genre});
        }
    ],

    POST: [
        // books/
        function () {
            return BooksFactory.new(this.request.body)
                .then(book => book.save());
        }
    ]
}

Automatic RESTful URLs

// Endpoint URLs is build based on function arguments:

function (limit = 10, offset = 0) { }
// https://api.example.com/books?limit=42&offset=21


function (libraryShelvesId, favoriteBooksId, orderBy = "") { }
// https://api.example.com/library-shelves/42/favorite-books/84?orderBy=+author

Models Schema Validation

{
    name: "Book",
    
    properties: {
        id: Property.id(),
        name: Property.string().min(1).required(),
        isbn: Property.string().pattern(/^\d-\d{3}-\d{5}-\d$/).example("0-330-25864-8"),
        authorId: Property.model("Author"),
        genre: Property.set(["Fantasy", "Science fiction", "Western", "Romance"]),
        creationTime: Property.date().private(),
        modificationTime: Property.date().private()
    }
    ...
}

Annotations

function(isbn) {
    // @path: books/isbn/(\d{1,5}[- ]\d{1,7}[- ]\d{1,6}[- ](?:\d|X))
    // @model: Books    
    // @summary: Get book by ISBN number
    
    return BooksFactory.get({isbn})
}

OpenAPI (Swagger) documentation

Automatic OpenAPI documentation based on source code.

Zero Dependencies

100Kb footprint Node.js framework with no npm dependencies. If you also think, that you don't need npm to left-pad a string.

About

Declarative Promise based Node.js framework for REST API with zero dependencies.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published