HttpClient
This is http requests client wrapper based on Fetch API.
Usage
ts
import { HttpClient } from "mobx-tanstack-query-api";
const httpClient = new HttpClient();
const response = await httpClient.request({
path: "/api/v1/fruits",
method: "GET",
});
console.log(response.status, response.data);API
constructor
Creates HttpClient instance.
ts
const httpClient = new HttpClient({
baseUrl: "https://api.example.com",
});baseUrl
Resolved base URL for requests.
ts
const httpClient = new HttpClient({ baseUrl: "https://api.example.com" });
console.log(httpClient.baseUrl); // https://api.example.commeta
Mutable metadata storage that can be used in interceptor and buildUrl.
ts
const httpClient = new HttpClient<{ token?: string }>({
meta: { token: "abc" },
});
console.log(httpClient.meta?.token); // abcbadResponse
Contains the latest failed HTTP response or parse error.
ts
try {
await httpClient.request({
path: "/api/v1/forbidden",
method: "GET",
});
} catch {
console.log(httpClient.badResponse); // failed response
}updateConfig
Updates client config at runtime.
ts
httpClient.updateConfig({
baseUrl: "https://staging-api.example.com",
baseApiParams: {
headers: {
"X-App-Version": "1.0.0",
},
},
});setMeta
Updates current meta object.
ts
httpClient.setMeta({ token: "new-token" });setBadResponse
Manually sets badResponse value.
ts
httpClient.setBadResponse({ custom: "error" });buildUrl
Builds final request URL from baseUrl, path and query.
ts
const url = httpClient.buildUrl({
path: "/api/v1/fruits",
query: { page: 1, limit: 10 },
});
console.log(url); // /api/v1/fruits?page=1&limit=10request
Sends HTTP request and returns HttpResponse. Throws on non-OK responses.
ts
const result = await httpClient.request<{ items: string[] }, { message: string }>({
path: "/api/v1/fruits",
method: "GET",
format: "json",
});
console.log(result.data.items);More examples
GET with query params
ts
const response = await httpClient.request({
path: "/api/v1/fruits",
method: "GET",
query: {
page: 1,
search: "apple",
},
format: "json",
});POST JSON body
ts
import { ContentType } from "mobx-tanstack-query-api";
const response = await httpClient.request({
path: "/api/v1/fruits",
method: "POST",
contentType: ContentType.Json,
body: {
title: "Apple",
color: "green",
},
format: "json",
});Upload file with FormData content type
ts
import { ContentType } from "mobx-tanstack-query-api";
await httpClient.request({
path: "/api/v1/files",
method: "POST",
contentType: ContentType.FormData,
body: {
file: selectedFile,
folder: "avatars",
},
});Add auth token via interceptor
ts
const httpClient = new HttpClient<{ token?: string }>({
meta: { token: "secret-token" },
interceptor: (params, meta) => ({
...params,
headers: {
...params.headers,
Authorization: meta?.token ? `Bearer ${meta.token}` : "",
},
}),
});Handle request errors
ts
try {
await httpClient.request({
path: "/api/v1/fruits/unknown-id",
method: "GET",
format: "json",
});
} catch (error) {
console.log("Request failed", error);
console.log("Last bad response", httpClient.badResponse);
}Custom URL builder
ts
const httpClient = new HttpClient({
baseUrl: "https://api.example.com",
buildUrl: (_fullParams, parts) => `${parts.baseUrl}${parts.path}${parts.query}`,
});