Getting started
Since this package is built on top of axios, your project must have installed the axios package first.
Installation
To install the HttpService package and the axios dependency run the following command in your terminal:
npm i axios @feedma/http-service
yarn add axios @feedma/http-service
Basic usage
Configuration
The HttpService module provides an abstract class that you can extend to configure the axios HTTP client, and the most part of the process is setting the config in your inherited class.
For example if you want to create a client for the jsonplaceholder fake API, a great way to do it is to create the class JsonPlaceHolderService.
// JsonPlaceHolderService.ts
import { HttpService } from '@feedma/http-service';
import { AxiosRequestConfig } from 'axios';
export class JsonPlaceHolderService extends HttpService {
protected config: AxiosRequestConfig = {
baseURL: "https://jsonplaceholder.typicode.com" ,
};
async fetchUsers(): Promise<AxiosResponse> {
return this.client.get('/users');
}
// Yor request methods here ...
}
// JsonPlaceHolderService.js
import { HttpService } from '@feedma/http-service';
export class JsonPlaceHolderService extends HttpService {
constructor(requestInterceptors = [], responseInterceptors = []) {
super(requestInterceptors, responseInterceptors);
this.config = {
baseURL: "https://jsonplaceholder.typicode.com",
};
}
async fetchUsers() {
return this.client.get('/users');
}
// Yor request methods here ...
}
As you can see the config property expects an object that implements the AxiosRequestConfig. Take a look in the axios docs if you want to learn more about the axios request config properties.
TIP
A great way to keep yor JsonPlaceHolderService class as clean as possible is storing yor api config into a different file in your project, for example src/configs/services.ts.
// src/configs/services.ts
import { AxiosRequestConfig } from 'axios';
export const endpoints: Record<string, AxiosRequestConfig> = {
jsonplaceholder: {
baseURL: "https://jsonplaceholder.typicode.com",
},
}
// src/configs/services.js
export const endpoints = {
jsonplaceholder: {
baseURL: "https://jsonplaceholder.typicode.com",
},
};
Creating request methods
Now you are able to add methods for make request to the jsonplaceholder API, in this example we will add a method to fetch the list of users, to do it we must use the client of our class, the client is an AxiosInstance, so you have all its available methods.
// JsonPlaceHolderService.ts
import { HttpService } from '@feedma/http-service';
import { AxiosRequestConfig } from 'axios';
import { endpoints } from '../config/services';
export class JsonPlaceHolderService extends HttpService {
protected config: AxiosRequestConfig = endpoints.jsonplaceholder;
async fetchUsers(): Promise<AxiosResponse> {
return this.client.get('/users');
}
// Yor additional methods here ...
}
// JsonPlaceHolderService.js
import { HttpService } from '@feedma/http-service';
import { endpoints } from '../config/services';
export class JsonPlaceHolderService extends HttpService {
constructor(requestInterceptors = [], responseInterceptors = []) {
super(requestInterceptors, responseInterceptors);
this.config = endpoints.jsonplaceholder;
}
async fetchUsers() {
return this.client.get('/users');
}
// Yor request methods here ...
}
Using the service class
Finally, import the service class in some place in our application to make a request and get the list of users:
// app.ts
import { ServiceResponse } from "@feedma/http-service/lib/types";
import { JsonPlaceHolderService } from './JsonPlaceHolderService';
import { IUser } from './types'
const service = new JsonPlaceHolderService();
const app = async () => {
const { data }: ServiceResponse<IUser[]> = await service.fetchUsers();
console.log(data);
// The rest of our app code...
}
// app.js
import { JsonPlaceHolderService } from './JsonPlaceHolderService';
const service = new JsonPlaceHolderService();
const app = async () => {
const { data } = await service.fetchUsers();
console.log(data);
// The rest of our app code...
};