Web API: Axios

20th August 2020 at 2:19pm
Web API

axios 是一个流行的 JS HTTP client 库。

下面是一个封装 axios 用于项目中使用的例子。同时它使用了 axios-case-converter 默认将字段名从 under_scores 形式转化成 camelCase 形式,以配合我使用 Django / DRF 作 API server 时输出的下划线字段名,转换成 JS 惯用的 camelCase。

// utils/api.js
import axios from 'axios';
import applyCaseMiddleware from 'axios-case-converter'

const defaults = {
  baseURL: process.env.API_URL || 'http://localhost:8000',
  headers: () => ({
    'Content-Type': 'application/json',
  }),
  error: {
    // 按你的 API 设计中出错时的回包格式进行设计
    detail: "Server error.",
  },
};

const api = (method, url, variables) =>
  new Promise((resolve, reject) => {
    const client = applyCaseMiddleware(axios.create());
    client.request({
      url: `${defaults.baseURL}${url}`,
      method,
      headers: defaults.headers(),
      params: method === 'get' ? variables : undefined,
      data: method !== 'get' ? variables : undefined,
    }).then(
      response => {
        resolve(response.data);
      },
      error => {
        // 按你的 API 设计中出错时的回包格式进行设计
        if (error.response) {
          reject(error.response);
        } else {
          reject(defaults.error);
        }
      },
    );
  });

export default {
  get: (...args) => api('get', ...args),
  post: (...args) => api('post', ...args),
  put: (...args) => api('put', ...args),
  patch: (...args) => api('patch', ...args),
  delete: (...args) => api('delete', ...args),
};