Skeleton for Angular REST services


stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
Minified + gzip package size for @northtech/bragi in KB



...is the god of skalds, giving the stories structure and form so they can be remembered and recited.

This package contains the generic skeleton for a REST service doing GET/PUT/POST/DELETE semantics against a URL and exposes the resulting data as Observable array.

It is an Angular tool, building upon the HttpClient, but it is not packaged and deployed as an Angular library. Instead, using code should extend the GenericRest to create project-specific, actual injectable data services.


At its simplest, the generic service can be used like this:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { GenericRest } from '@northtech/bragi';

export class MyClassService extends GenericRest<MyClass> {
  constructor(httpClient: HttpClient, stringService: InterpolatedStringService) {
    super(httpClient, 'htt://url-to-rest-sercice', 'nameOfIdFieldInMyClass', {
      interpolatedStringService: stringService

This will create an injectable MyClassService which has a data property of type Observable<MyClass[]>, and template code can simply do something like

<div *ngFor="let myClass of myClassService.data|async"></div>

At first glance, this does not look much different from simply using HttpClient and subscribing to the result, but the advantage of this service structure is that any changes, no matter how or where they are initiated, will be published from the service and reflected across the UI, in true reactive style.

The service skeleton also contains methods to refresh, save and delete objects, automatically publishing any such changes after the server accepts them.

The given URL will be registered in the InterpolatedStringService, making it easy to configure e.g. server addresses as placeholder variables in the string.

Additionally, the service also offers a fuzzy search, similarly exposed as an Observable.

While Bragi can be used by itself, it has a Java part which can auto-generate interfaces and data services from Java classes.

Remember to include the BragiModule in your app module.

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.