- Spec files
npm-axios
Describes: pkg:npm/axios@1.11.x
- Description
- Promise based HTTP client for the browser and node.js
- Author
- tessl
- Last updated
instance-management.md docs/
1# Instance Management23Create and manage custom axios instances with their own configuration defaults, useful for different APIs, environments, or authentication schemes.45## Capabilities67### Create Custom Instance89Create a new axios instance with custom default configuration.1011```javascript { .api }12/**13* Create a new axios instance with custom defaults14* @param config - Default configuration for the new instance15* @returns New axios instance with specified defaults16*/17axios.create(config?: CreateAxiosDefaults): AxiosInstance;1819interface CreateAxiosDefaults {20baseURL?: string;21timeout?: number;22headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial<HeadersDefaults>;23transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];24transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];25paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer;26adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];27auth?: AxiosBasicCredentials;28responseType?: ResponseType;29responseEncoding?: responseEncoding;30xsrfCookieName?: string;31xsrfHeaderName?: string;32maxContentLength?: number;33maxBodyLength?: number;34validateStatus?: (status: number) => boolean;35maxRedirects?: number;36proxy?: AxiosProxyConfig | false;37// ... other AxiosRequestConfig properties38}39```4041**Usage Examples:**4243```javascript44import axios from "axios";4546// API-specific instance47const apiClient = axios.create({48baseURL: "https://api.example.com/v1",49timeout: 10000,50headers: {51"Authorization": "Bearer your-token-here",52"Content-Type": "application/json"53}54});5556// Different environment instances57const developmentAPI = axios.create({58baseURL: "https://dev-api.example.com",59timeout: 30000, // Longer timeout for dev60headers: { "X-Environment": "development" }61});6263const productionAPI = axios.create({64baseURL: "https://api.example.com",65timeout: 5000,66headers: { "X-Environment": "production" }67});68```6970### Instance Interface7172Custom instances implement the same interface as the default axios instance.7374```javascript { .api }75interface AxiosInstance extends Axios {76// Function call interface77<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;78<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;7980// Create sub-instances81create(config?: CreateAxiosDefaults): AxiosInstance;8283// Instance defaults84defaults: Omit<AxiosDefaults, 'headers'> & {85headers: HeadersDefaults & {86[key: string]: AxiosHeaderValue87}88};8990// All HTTP methods available91get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;92post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;93put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;94patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;95delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;96head<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;97options<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;98postForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;99putForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;100patchForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;101}102```103104**Usage Examples:**105106```javascript107// Use instance like default axios108const users = await apiClient.get("/users");109const newUser = await apiClient.post("/users", userData);110111// Function call interface112const config = { method: "get", url: "/profile" };113const profile = await apiClient(config);114115// Create sub-instance with additional defaults116const adminAPI = apiClient.create({117headers: { "X-Admin": "true" },118timeout: 15000119});120```121122### Axios Class123124Direct instantiation of the Axios class for maximum control.125126```javascript { .api }127/**128* Axios class constructor129* @param instanceConfig - Configuration for the instance130*/131class Axios {132constructor(instanceConfig?: AxiosRequestConfig);133134/** Instance defaults configuration */135defaults: AxiosDefaults;136137/** Interceptors for requests and responses */138interceptors: {139request: AxiosInterceptorManager<InternalAxiosRequestConfig>;140response: AxiosInterceptorManager<AxiosResponse>;141};142143/** Core request method */144request<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;145146/** Generate complete request URI */147getUri(config?: AxiosRequestConfig): string;148149// All HTTP method implementations150get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;151post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;152// ... other HTTP methods153}154```155156**Usage Examples:**157158```javascript159import { Axios } from "axios";160161// Direct class instantiation162const customClient = new Axios({163baseURL: "https://custom-api.example.com",164timeout: 8000165});166167// Access interceptors168customClient.interceptors.request.use(config => {169console.log("Making request to:", config.url);170return config;171});172173// Generate URI without making request174const uri = customClient.getUri({175url: "/users",176params: { page: 1, limit: 10 }177});178console.log(uri); // "https://custom-api.example.com/users?page=1&limit=10"179```180181### Instance Configuration Management182183Modify instance defaults and access configuration.184185```javascript { .api }186interface AxiosDefaults {187/** Base URL for all requests */188baseURL?: string;189/** Request timeout in milliseconds */190timeout: number;191/** Default headers for different HTTP methods */192headers: HeadersDefaults;193/** Request data transformers */194transformRequest: AxiosRequestTransformer[];195/** Response data transformers */196transformResponse: AxiosResponseTransformer[];197/** Default request adapter */198adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];199/** Basic authentication credentials */200auth?: AxiosBasicCredentials;201/** Default response type */202responseType?: ResponseType;203/** Maximum request/response size */204maxContentLength?: number;205maxBodyLength?: number;206/** Status validation function */207validateStatus?: (status: number) => boolean;208/** Maximum number of redirects */209maxRedirects?: number;210/** Proxy configuration */211proxy?: AxiosProxyConfig | false;212}213214interface HeadersDefaults {215common: RawAxiosRequestHeaders;216delete: RawAxiosRequestHeaders;217get: RawAxiosRequestHeaders;218head: RawAxiosRequestHeaders;219post: RawAxiosRequestHeaders;220put: RawAxiosRequestHeaders;221patch: RawAxiosRequestHeaders;222options?: RawAxiosRequestHeaders;223purge?: RawAxiosRequestHeaders;224link?: RawAxiosRequestHeaders;225unlink?: RawAxiosRequestHeaders;226}227```228229**Usage Examples:**230231```javascript232// Modify instance defaults233const api = axios.create();234235// Change base URL236api.defaults.baseURL = "https://new-api.example.com";237238// Set common headers239api.defaults.headers.common["Authorization"] = "Bearer new-token";240241// Set method-specific headers242api.defaults.headers.post["Content-Type"] = "application/json";243244// Modify timeout245api.defaults.timeout = 15000;246247// Custom status validation248api.defaults.validateStatus = (status) => status < 500;249```250251### Multiple Instance Patterns252253Common patterns for managing multiple API instances.254255**Usage Examples:**256257```javascript258// Service-based instances259const authService = axios.create({260baseURL: "https://auth.example.com",261timeout: 5000262});263264const dataService = axios.create({265baseURL: "https://data.example.com",266timeout: 10000,267headers: { "Content-Type": "application/json" }268});269270const fileService = axios.create({271baseURL: "https://files.example.com",272timeout: 30000, // Longer timeout for file operations273maxBodyLength: 50 * 1024 * 1024 // 50MB max file size274});275276// Environment-based factory277function createAPIClient(environment) {278const baseURLs = {279development: "https://dev-api.example.com",280staging: "https://staging-api.example.com",281production: "https://api.example.com"282};283284return axios.create({285baseURL: baseURLs[environment],286timeout: environment === "development" ? 30000 : 10000,287headers: {288"X-Environment": environment289}290});291}292293const api = createAPIClient(process.env.NODE_ENV);294```