Наверное каждое WEB приложение имеет методы для получения данных через XMLHttpRequest. И для приложений в котором достаточно много таких запросов важно иметь правила организации этих запросов. Хочу поделиться тем решением которое использую я в проектах.
-
В корне приложения создаем папку
api
/src --/api
-
На текущий момент популярная бибилиотека для работы c XMLHttpRequest является Axios по этому я ее и использую. Создаем файл
axios.js
где инициализируем этот инструмент./src --/api ----/axios.js
Содержимое файла (минимально для примера, в реальности данный файл также обрастает проверками статуса 401, AbortController и др.)
// axios.js import axios from 'axios'; // ипортируем метод getItemLocalstorage из вспомогательной // библиотеки для работы с localStorage import getItemLocalstorage from '@/helpers/localStorage.js'; // прописываем базовые настройки экземпляра axios const Axios = axios.create({ baseURL: '/api/', }); // добавляем заголовок для авторизации OAuth 2.0 Axios.interceptors.request.use(config => { const token = getItemLocalStorage('accessToken'); const authorizisationToken = token ? `Bearer ${token}` : ''; config.headers.Authorization = authorizisationToken; return config; }) export default Axios;
-
Создаем файл
auth.js
в котором будут размещены методы касаемые авторизации пользователя (login,logout, forgotPassword и др.). Таким образом мы логически выделяем методы. Для примера укажу абстрактрые 2 метода./src --/api ----/axios.js ----/auth.js
Содержимое файла
// auth.js import Axios from '@/api/axios' const loginApi = credentials => { return Axios.post('/auth/login', credentials) } const logoutApi = () => { return Axios.get('/auth/logout') } export default { loginApi, logoutApi }
-
Теперь уже можно импортировать методы запросов к API в компонентах WEB приложения и вызывать (пример Vue компонента)
<script> import {loginApi, logoutApi} from '@/api/auth'; methods:{ async login(){ try{ const credentials = { user: this.user, password: this.password }; const {data} = await loginApi(credentials); // Axios возвращате Promise // далее уже работаем с полученными данными // записываем полученные токены в localStorage и cookie ... } catch(e){ console.log(e) } finally { this.loading = false; } } } </script>
Итог:
Мы получили логическое разделение запросов API по по файлам.
Comments