This package has been deprecated

Author message:

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

@flowup/ng2-api
TypeScript icon, indicating that this package has built-in type declarations

0.4.4 • Public • Published

Ng2Api

Ng2-api is a package that allows to consume Http JSON APIs while retaining type-safety.

npm version wercker status

Table of contents

Installation

You can install ng2-api via

  • yarn
$ yarn add @flowup/ng2-api
  • npm
$ npm install @flowup/ng2-api --save

Basic implementation example

🤖 Please follow the Basic usage for the full example.

Ng2API supports GET, POST, PUT and DELETE calls in it's base. All methods can be called on a single model or array, e.g.: get(modelArray) or getSingle(model).

1) Initialize the module:

import { NgModule } from '@angular/core';
import { Ng2APIModule } from '@flowup/ng2-api';

@NgModule({
  imports: [
    Ng2APIModule.forRoot('base_serve_url.com', [
      'BookResource', 'UserResource' // resources to be initialized
    ])
  ]
})
class AppModule {
}

2) Define a model and a service afterwards

import { APIConfig, Resource } from '@flowup/ng2-api';
import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs';

const USER_API_ENDPOINT = '/users';

// api endpoint model
export interface User {
  email: string,
  id?: number
}

@Injectable()
export class UserService {
  // inject desired resources to the user service,
  //  the name of resource specified in @Inject is one of specified in module
  constructor(@Inject('UserResource') private users: Resource<User>) {
    this.users.setResourceBase(USER_API_ENDPOINT);
  }

  getUserById(id: number): Observable<User> {
    // args will be added into the url: /users/:id
    return this.users.getSingle({args: [id]});
  }

  createUser(user: User): Observable<User> {
    // pass the user object as model
    return this.users.create(user);
  }
}

3) Use the service within a component

@Component({...})
class MyComponent {
  constructor(private users: UserService) {
  }

  createUser(user: User) {
    let user = this.users.createUser(user);
  }

  getUserById(id: number) {
    let user = this.users.getUserById(id);
  }
}

**Use Resource in ngrx/effect **

const BOOK_API_ENDPOINT = '/books'

@Injectable()
export class BooksEffect {
  constructor(private actions: Actions, @Inject('BookResource') private books: Resource<Book>) {
    this.books.setResourceBase(BOOK_API_ENDPOINT);
  }

  @Effect() getNotifications: Observable<Action> = this.actions
    .ofType('GET_BOOKS')
    .switchMap(() => this.books.get()
      .map(response =>({type: 'GET_BOOKS_SUCCESSFUL', payload: response}))
      .catch(err => Observable.of({type: 'GET_BOOKS_FAILURE', payload: err})));
}

Another way of usage is extend Resource class

class BookService extends Resource<Book> {
  // inject and pass config, http and relative path to the Resource
  constructor(config: APIConfig, http: Http) {
    // initialize Resource
    super(config, http, '/users');
  }
}

For more examples visit the Cookbook

Build

Run yarn build to build the project. The build artifacts will be stored in the dist/ directory.

Running unit tests

Run yarn test to execute unit and e2e tests.

Contributing

If you would like to contribute, read first through Angular contribution guidelines. Get the repository

$ git clone https://github.com/flowup/ng2-api.git

Readme

Keywords

none

Package Sidebar

Install

npm i @flowup/ng2-api

Weekly Downloads

2

Version

0.4.4

License

MIT

Last publish

Collaborators

  • helloflowup
  • matejchalk
  • mrkpks
  • paveltobias
  • siso
  • vmasek