ng-rest v1.0.0-beta.6.3
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 
RestRequestServiceand overridebeforeSendmethod. - register in 
AppModuleand inject into every your*ApiServiceyour ownRestRequestServiceinstead of the service fromng-rest 
Example:
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. 
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago