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());
}
]
}
// 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
{
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()
}
...
}
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})
}
Automatic OpenAPI documentation based on source code.
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