declarative-resource
v1.0.0
Published
Angular declarative resource utility library. Write resource methods in a declarative way
Downloads
5
Maintainers
Readme
Angular ES6 utility library. Call your backend API in a declarative way
What does it do ?
When using Angular to build your App, there always things you want to make more generic, for instance let's say you want all your backend calls to be made from a single class, or simply a class that contains CRUD declaration and other 'resources' just inherit from it.
Well, that's what we do. $resource from angular-resource is a great tool, we rely on it to make http requests.
Our philosophy is to create a JS class called Resource for every backend Resource, this class will inherit from a parent JS class, it gets all the basic methods, for each specific need you'll add a single line containing the method's declaration.
That's it; just add a line and call it a day :)
We're open to suggestions, please don't hesitate : [email protected]
Instalation
npm install declarative-resource
How to ?
Register the resource
import GenericResource from "declarative-resource";
class BookResource extends GenericResource{
constructor($resource) {
super($resource);
this.register(this,'update','POST',this.getPath());
return this.getResource(this);
}
getPath() {
return '/api/books/:id'
}
getPathParams() {
return "{id:'@id'}"
}
}
BookResource.$injetc= ['$resource'];
export default BookResource;
Use it :
class BookController {
constructor(BookResource) {
this.BookResource = BookResource;
}
callMe(){
let Book = {id :1,author :'me'};
this.BookResource.update(book);
}
}
BookController.$inject=['BookResource'];
export default BookController;
Advanced usage :
Let's say you want to define a update() method for all your resources in a generic way, using angular-resource, the best you can do is, to define it in every single factory you create, it may be okay, but it can be done in a better way.
what will do, instead of inhiriting from GenericResource, we'll create a new class to hold our specific API common configuration :
import GenericResource from "declarative-resource";
class Api extends GenericResource{
constructor($resource) {
super($resource);
this.register(this,'update','PUT', false);
}
}
Api.$injetc= ['$resource'];
export default Api;
Now we can extend from Api class, all our resources will have update() method, assuming that we created api.resource.js somewhere.
import Api from "./api.resource";
class BookResource extends Api{
constructor($resource) {
super($resource);
return this.getResource(this);
}
getPath() {
return '/api/books/:id'
}
getPathParams() {
return "{id:'@id'}"
}
}
BookResource.$inject= ['$resource'];
export default BookResource;
Pull request
Pull requests are welcome
Run build for production
npm run build
Run build for development
npm run dev