ng-rest
v1.0.0-beta.6.3
Published
Powerful and flexible angular REST client. Fully abstraction layer.
Downloads
46
Maintainers
Readme
Ng Rest
Powerful and flexible angular REST client. Fully abstraction layer.
How to use:
Step 0. Register services in AppModule
. src/app/app.module.ts
// ...,
import { RequestService, RestRequestService } from 'ng-rest';
@NgModule({
// ...,
providers: [
// ...,
RequestService,
RestRequestService,
],
// ...,
})
class AppModule {
// ...
}
Step 1. Make a model. For example src/app/models/user.model.ts
import { Model } from 'ng-rest';
import { Location } from './location';
class User extends Model<User> {
public id: number;
public name: string;
public isAdmin: boolean;
public location: Location; // any submodel
public constructor(data: any = {}) {
super(data);
this.fill(data)
.number('id')
.string('name')
.boolean('isAdmin')
.model('location');
}
}
Step 2. Make an api service. For example src/app/core/api/user-api.service.ts
import { Injectable, Injector } from '@angular/core';
import { AnyObject, StringObject } from 'typed-object-interfaces';
import { DefaultRestService, RestRequestService } from 'ng-rest';
import { User } from 'app/models/user.model';
import { APP_CONFIG, AppConfig } from 'app/config';
/**
* User Api Service
*/
@Injectable()
export class UserApiService extends DefaultRestService<User> {
protected baseUrl;;
protected modelClass = User;
public constructor(
restRequest: RestRequestService,
@Inject(APP_CONFIG) private config: AppConfig,
private locationApi: locationApiService,
) {
super(restRequest);
this.baseUrl = `${config.apiBaseUrl}/users`;
}
/**
* Rename fields that we want
*/
protected fieldsMap(): StringObject {
return {
'is_admin': 'isAdmin',
'user_name': 'name',
'user_location': 'location',
};
}
/**
* Service map for parse submodels
*/
protected submodelsMap(): StringObject {
return {
'location': this.locationApi,
};
}
}
Step 3. Just use :)
// ...
imoprt { Entity } from 'ng-rest';
import { User } fom 'app/models/user.model.ts';
import { UserApiService } from 'app/core/api/user-api.service.ts';
// ...
class MyComponent implements OnInit {
public constructor(
private userApi: UserApiService,
) {}
public ngOnInit() {
let user = new User();
user.name = 'Mike';
user.isAdmin = false;
this.userApi.create(user).subscribe((entity: Entity<User>) => {
let savedUser: User = entity.data;
console.log(savedUser.id); // is a number
console.log(savedUser instanceof User); // true
});
}
}
F.A.Q.
- How to add token to every request?
You need to do:- extend
RestRequestService
and overridebeforeSend
method. - register in
AppModule
and inject into every your*ApiService
your ownRestRequestService
instead of the service fromng-rest
import { Injectable } from '@angular/core'; import { RestRequestData, RequestService, RestRequestService as RestRequestService_ } from 'ng-rest'; import { SessionService } from 'app/core/services/session.service'; @Injectable() export class RestRequestService extends RestRequestService_ { public constructor( request: RequestService, private session: SessionService, ) { super(request); } protected beforeSend(data: RestRequestData): RestRequestData { const updatedData: RestRequestData = { ...data }; if (!data.token && this.session.token) { updatedData.token = this.session.token; } return updatedData; } }
- extend
Todo
- make Model class as a separate package
- fix and add comments in the code
- write documentation
- configure trevis
- configure webpack
- make and commit a build
Yarn Warning: if you use yarn
instead of the npm
, please specify the exact version of the package.
For example 1.0.0-beta.4.4
without any ^
or ~
at the start.
It is need because yarn incorrect work with beta
sub-versions.
If you specify ^1.0.0-beta.4.0
then version 1.0.0.beta.1
will be installed.