@ecedi/api-factory

Simplification of connection with API Symfony, Drupal 8, Contenta CMS...

Usage no npm install needed!

<script type="module">
  import ecediApiFactory from 'https://cdn.skypack.dev/@ecedi/api-factory';
</script>

README

Api Factory for Angular by ECEDI

Generic badge Generic badge Generic badge

This library is for connected all your project angular with your api Symfony, Drupal 8, Contenta CMS...

You have access with this module at this :

  • AuthService (For authentification user)
  • ApiRequestFactoryService (For create request with connection enabled with user)
  • AuthInterceptorService (For intercept all request from this module and add authentification or check if token is not expired)

For this you need to import this module :

import { environment } from '@environments/environment';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    ApiFactoryModule.forRoot(environment)
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Your environment file need all this properties (you can create one file for credentials):

const credentials = {
  grant_type: '',
  client_id: '',
  client_secret: '',
  scope: ''
};

export const environment = {
  production: false,
  credential: credentials,
  apiDomain: 'http://localhost',
  waiting: false,
};

You can use all service with import this in providers :

providers: [
  AuthService,
  ApiRequestFactoryService,
  { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptorService, multi: true },
]

Example for create request with ApiRequestFactoryService :

export class ExampleService {
  constructor(private apiFactory: ApiRequestFactoryService) { }

  getItems<T>(): Observable<T> {
    const query = this.apiFactory.create<T>(`${url}`, false); // create query object, the second parameter is for json api (Drupal 8, Contenta cms).
    return query.get(); // return promise (get/post/patch/delete/put is enabled).
  }
}

export class ExampleComponent {
  constructor(private exampleService: ExampleService) { }
  
  getItems() {
    this.exampleService.getItems().subscribe((value: any) => {
      console.log(value);
    })
  }
}

If you use JSON API you have access at this (Drupal 8, Contenta CMS):

export class ExampleService {
  constructor(private apiFactory: ApiRequestFactoryService) { }

  getItems<T>(): Observable<T> {
    const query = this.apiFactory.create<T>(`${url}`, true); // Create query object, the second parameter is for json api (Drupal 8, Contenta cms).
    query.fields('key', 'string'); // Include fields in your request.
    query.include('string'); // Include linked entity.
    query.pager('limit', 'offset'); // Request with pager (json api limit at 50 per page).
    query.sort('value'); // Basic sort.
    query.condition('field', 'path', 'value', 'operator', 'memberof'); 
    // Or with condition group
    query.conditionGroup('name', 'operator');
    query.condition('field', 'path', 'value', 'operator', 'conditionGroupName');

    return query.get(); // Return promise (get/post/patch/delete/put is enabled).
  }
}