ngx-restful-client
TypeScript icon, indicating that this package has built-in type declarations

8.0.0-rc.5 • Public • Published

ngx-restful-client

  • [ptBR] A biblioteca Angular definitiva para declarar e implementar primorosamente as APIs REST que você usará na sua aplicação.

  • [en] The ultimate Angular library to exquisitely declare and implement the REST APIs you'll use in your application.

Angular

TL;DR

Sample of how to use the library

  • API
import {RestApi} from "./rest-api";
import {HttpClient} from "@angular/common/http";

@Injectable({providedIn: "root"})
export class BookstoreApi extends RestApi {
  readonly books = new BooksResource(this);
  readonly authors = new AuthorsResource(this);

  constructor(http: HttpClient) {
    super(http, 'http://api.bookstore.com/v1');
  }

  /**
   * Override this method if you need to dinamically add the Authorization header when needed
   */
  get guard(): BookstoreApi {
    return super.guard as any;
  }

  /**
   * Override this method if you need to dinamically remove the Authorization header when needed
   */
  get unguard(): BookstoreApi {
    return super.guard as any;
  }

  /**
   * Override this method to provide the Authorization header content
   */
  get authorization(): string {
    return `Bearer ${localStorage.getItem('token')}`;
  }
}
  • Resources

BooksResource

import {ReferenceableResource} from "./referenceable-resource";
import {ReferencedResource} from "./referenced-resource";
import {RestResource} from "./rest-resource";

export class BooksResource extends ReferenceableResource<BooksCollection> {
  constructor(parent: RestResource) {
    super('/books', parent, p => new BooksCollection(p));
  }
}

class BooksCollection extends ReferencedResource {
  readonly authors = new AuthorsResource(this);
}

AuthorsResource

import {ReferenceableResource} from "./referenceable-resource";
import {ReferencedResource} from "./referenced-resource";
import {createDefaultResource} from "./index";

export class AuthorsResource extends ReferenceableResource<AuthorsCollection> {
  constructor(parent: RestfulResource) {
    super(parent, '/authors', p => new AuthorsCollection(p));
  }
}

export class AuthorsCollection extends ReferencedResource {
  /**
   * Get the books of a specific author
   */
  readonly books = new BooksResource(this);
  /**
   * May get movies produced based on the author's work
   */
  readonly movies = createDefaultResource('/movies');
}
  • Service

ExploreAuthorsService

@Injectable({providedIn: "root"})
export class ExploreAuthorsService {
  constructor(private readonly api: BookstoreApi) {
  }

  saveNewAuthor(author: Author): Observable<Author> {
    return this.api.authors.post<Author>(author);
  }

  updateExistingAuthor(author: Author): Observable<Author> {
    return this.api.authors.put<Author>(author);
  }

  deleteAuthor(id: number): Observable<unknown> {
    return this.api.authors.id(id).delete();
  }

  getAuthorById(id: number): Observable<Author> {
    return this.api.authors.id(id).get<Author>();
  }

  filterAuthors(filter?: AuthorFilter): Observable<Author[]> {
    return this.api.authors.get<Author[]>(() => filter);
  }

  getBooksByAuthorId(authorId: number): Observable<Book[]> {
    return this.api.authors.id(authorId).books.get<Book[]>();
  }

  getMoviesByAuthorId(authorId: number): Observable<any[]> {
    return this.api.authors.id(authorId).movies.get();
  }

}
  • Component

AppComponent

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  constructor(readonly service: ExploreAuthorsService) {
    this.execute();
  }
  execute(): void {
    this.service.getBooks(1).pipe(take(1)).subscribe(b => logger.info('Books of author: ', b));
    this.service.filterAuthors({name: 'John'}).pipe(take(1)).subscribe(b => logger.info('Authors found: ', b));
    this.service.getMovies(2).pipe(take(1)).subscribe(b => logger.info('Movies found: ', b));
  }
}

Package Sidebar

Install

npm i ngx-restful-client

Weekly Downloads

0

Version

8.0.0-rc.5

License

MIT

Unpacked Size

154 kB

Total Files

81

Last publish

Collaborators

  • leandrobarcellos