Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@rapidui/quiver-http

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rapidui/quiver-http

Rapid UI HTTP Module

  • 0.0.0-beta.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

HttpInterceptorService

API Summary

Methods:

NameTypeDescription
deletefunction(url: string, options: RequestOptionsArgs)Uses underlying @angular [http] to request a DELETE method to a URL, executing the interceptors as part of the request pipeline.
getfunction(url: string, options: RequestOptionsArgs)Uses underlying @angular [http] to request a GET method to a URL, executing the interceptors as part of the request pipeline.
headfunction(url: string, options: RequestOptionsArgs)Uses underlying @angular [http] to request a HEAD method to a URL, executing the interceptors as part of the request pipeline.
patchfunction(url: string, data: any, options: RequestOptionsArgs)Uses underlying @angular [http] to request a PATCH method to a URL, executing the interceptors as part of the request pipeline.
postfunction(url: string, data: any, options: RequestOptionsArgs)Uses underlying @angular [http] to request a POST method to a URL, executing the interceptors as part of the request pipeline.
putfunction(url: string, data: any, options: RequestOptionsArgs)Uses underlying @angular [http] to request a PUT method to a URL, executing the interceptors as part of the request pipeline.
request`function(url: stringRequest, options: RequestOptionsArgs)`

Usage

Service provided with methods that wrap the @angular [Http] service and provide an easier experience for interceptor implementation.

To add a desired interceptor, it needs to implement the [IHttpInterceptor] interface.

export interface IHttpInterceptor {
  onRequest?: (requestOptions: RequestOptionsArgs) => RequestOptionsArgs;
  onRequestError?: (requestOptions: RequestOptionsArgs) => RequestOptionsArgs;
  onResponse?: (response: Response) => Response;
  onResponseError?: (error: Response) => Response;
}

Every method is optional, so you can just implement the ones that are needed.

Setup

Create your custom interceptors by implementing [IHttpInterceptor]:

import { Injectable } from '@angular/core';
import { IHttpInterceptor } from '@quiver/http';

@Injectable()
export class CustomInterceptor implements IHttpInterceptor {

   onRequest(requestOptions: RequestOptionsArgs): RequestOptionsArgs {
    ... // do something to requestOptions before a request
    ... // if something is wrong, throw an error to execute onRequestError (if there is an onRequestError hook)
    if (/*somethingWrong*/) {
      throw new Error('error message for subscription error callback');
    }
    return requestOptions;
  }

  onRequestError(requestOptions: RequestOptionsArgs): RequestOptionsArgs {
    ... // do something to try and recover from an error thrown `onRequest` 
    ... // and return the requestOptions needed for the request
    ... // else return 'undefined' or throw an error to execute the error callback of the subscription
    if (cantRecover) {
      throw new Error('error message for subscription error callback'); // or return undefined;
    }
    return requestOptions;
  }

  onResponse(response: Response): Response {
    ... // check response status and do something
    return response;
  }

  onResponseError(error: Response): Response {
    ... // check error status and do something
    return error;
  }
}

Then, import the [QuiverHttpModule] using the forRoot() method with the desired interceptors and paths to intercept in your NgModule:

import { NgModule, Type } from '@angular/core';
import { HttpModule } from '@angular/http';
import { QuiverHttpModule, IHttpInterceptor } from '@quiver/http';
import { CustomInterceptor } from 'dir/to/interceptor';

const httpInterceptorProviders: Type<IHttpInterceptor>[] = [
  CustomInterceptor,
  ...
];

@NgModule({
  imports: [
    HttpModule,
    QuiverHttpModule.forRoot({
      interceptors: [{
        interceptor: CustomInterceptor, paths: ['**'],
      }],
    }),
    ...
  ],
  providers: [
    httpInterceptorProviders,
    ...
  ],
  ...
})
export class MyModule {}

After that, just inject [HttpInterceptorService] and use it for your requests.

Paths

The following characters are accepted as a path to intercept

  • ** is a wildcard for [a-zA-Z0-9-_] (including /)
  • * is a wildcard for [a-zA-Z0-9-_] (excluding /)
  • [a-zA-Z0-9-_]
Examples

Example 1

/users/*/groups intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups

/users/*/groups DOES NOT intercept:

  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/groups

Example 2

/users/**/groups intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups

/users/**/groups DOES NOT intercept:

  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups

Example 3

/users/** intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups

/users/** DOES NOT intercept:

  • www.url.com/users

Example 4

/users** intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups
  • www.url.com/users

RESTService

API Summary

Methods:

NameTypeDescription
queryfunction(query?: IRestQuery, transform?: IRestTransform)Creates a GET request to the generated endpoint URL.
get`function(id: stringnumber, transform?: IRestTransform)`
createfunction(obj: T, transform?: IRestTransform)Creates a POST request to the generated endpoint URL.
update`function(id: stringnumber, obj: T, transform?: IRestTransform)`
delete`function(id: stringnumber, transform?: IRestTransform)`
buildUrl`function(id?: stringnumber, query?: IRestQuery)`

Usage

Abstract class provided with methods that wraps http services to facilitate REST API calls.

Example:

import { Injectable } from '@angular/core';
import { Response, Http, Headers } from '@angular/http';
import { RESTService, HttpInterceptorService } from '@quiver/http';

@Injectable()
export class CustomRESTService extends RESTService<any> {

  constructor(private _http: Http /* or HttpInterceptorService */) {
    super(_http, {
      baseUrl: 'www.api.com',
      path: '/path/to/endpoint',
      headers: new Headers(),
      dynamicHeaders: () => new Headers(),
      transform: (res: Response): any => res.json(),
    });
  }
}

Note: the constructor takes any object that implements the methods in [IHttp] interface. This can be the @angular [Http] service, the Quiver [HttpInterceptorService] or a custom service.

export interface IHttp {
  delete: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  get: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  head: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  patch: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  post: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  put: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  request: (url: string | Request, options: RequestOptionsArgs) => Observable<Response>;
}

Keywords

FAQs

Package last updated on 11 Aug 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc