Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dominion-framework/dominion
Declarative Promise based Node.js framework for REST API with zero dependencies.
https://github.com/dominion-framework/dominion
dominion framework nodejs openapi restfull-apis
Last synced: about 1 month ago
JSON representation
Declarative Promise based Node.js framework for REST API with zero dependencies.
- Host: GitHub
- URL: https://github.com/dominion-framework/dominion
- Owner: dominion-framework
- License: mit
- Created: 2019-07-31T09:37:07.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-10-16T16:46:13.000Z (about 2 years ago)
- Last Synced: 2024-10-01T15:10:09.309Z (about 2 months ago)
- Topics: dominion, framework, nodejs, openapi, restfull-apis
- Language: JavaScript
- Homepage: https://dominion.js.org
- Size: 81.1 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
![Dominion Node.js framework for RESTfull APIs](https://dominion.js.org/assets/logo.svg)
# Dominion Node.js framework for RESTfull APIs
[![Gitter](https://badges.gitter.im/dominion-framework/community.svg)](https://gitter.im/dominion-framework/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![install size](https://packagephobia.now.sh/badge?p=@dominion-framework/dominion)](https://packagephobia.now.sh/result?p=@dominion-framework/dominion)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](https://dominion.js.org/)__.
# Features highlight
### Clear Endpoints Declaration
```js
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
```js
// Endpoint URLs is build based on function arguments:function (limit = 10, offset = 0) { }
// https://api.example.com/books?limit=42&offset=21function (libraryShelvesId, favoriteBooksId, orderBy = "") { }
// https://api.example.com/library-shelves/42/favorite-books/84?orderBy=+author```
### Models Schema Validation
```js
{
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
```js
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](https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/) a string.