Dominion is declarative Promise based Node.js framework for RESTful API

Clear Endpoints Declaration

Read More ⟶

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

Read More ⟶

// 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

Read More ⟶

{
    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

Read More ⟶

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.

OpenAPI (Swagger) documentation

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.

Credits: The node_modules problem OpenAPI (Swagger) documentation