Понимание того, что делает Axios - PullRequest
0 голосов
/ 04 марта 2019

Меня попросили сделать вызов API для отправки данных.

При нажатии на vue я запускал это событие

async facebookDataToSend () {
  let campaignID = await this.$store.getters['CurrentInstance/id']
  this.$axios.post(process.env.API_BASE_URL + 'faceeBookCampaign', { campaignID: campaignID }, { withCredentials: true })
},

Но затем мне сказали использовать функции API, которые уже существуют в каком-то файле xyz.js.

Мой файл xyz.js выглядит следующим образом ..

const rest = {
  something: axios.create({
    baseURL: process.env.API_BASE_URL,
    withCredentials: true
  }),
  setClient: function (client) {
    this.something = axios.create({
      baseURL: process.env.API_BASE_URL,
      withCredentials: true,
      params: {
        __somethingClient: client
      }
    })
    this.client = client
  }
}

Здесь я не могу понять, как я могу использовать этот экземпляр для вызова API, поэтому я просмотрел код, где ониЯ уже сделал вызов API и увидел что-то вроде этого

const API = {
  url: '/whateverHtml/',
        method: 'post',
        withCredentials: true,
        data: {
          'schemaType': 'something-event', // TODO FIXME
          'field': 'description', // TODO FIXME
          'html': this.model[this.field.key]
        }
api.something.request(API).then(result => {

И я не смог понять код.Для начала

Что такое запрос?Я не вижу свой метод или свойство внутри something в моей rest переменной

секунду, почему они используют withCredentials: true в своем API объекте, когда они уже установили свойство как trueв rest объекте]

Каковы профессионалы использования axios.create({ то есть, что они делают, чем то, что я изначально делал this.$axios.post(

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

request - это метод, определенный axios.Ссылка на документы .

request позволяет сделать HTTP-вызов с любым нужным глаголом (POST, GET, DELETE, PUT).Скорее всего, axios вызывает request изнутри всех других вспомогательных методов (get, post), но это детали реализации.Одним из преимуществ использования request является то, что вам не нужно жестко кодировать глагол HTTP (POST, GET ...), и вы можете установить его во время выполнения в зависимости от вашего ввода.

Я вижуДве причины, по которым они установили withCredentials:

  • setClient, могут вызываться или не вызываться раньше something
  • для ясности: достаточно взглянуть на определение something чтобы понять, что клиент использует учетные данные, и вам не нужна дополнительная информация о том, как rest работает.

Я не думаю, что запрос на использование вами something кипитдо преимуществ axios.$post против axios.create.Вероятно, это больше связано с тем, как организовать ваш код.

Некоторые преимущества использования отдельного модуля по сравнению с непосредственным вызовом axios

  • при непосредственном обращении к axios, вам предшествует базовый URLвремя, когда при использовании модуля для вашего REST API базовый URL скрывается и, возможно, облегчает чтение вашего кода
  • , вы можете испечь другие опции в конфигурации и убедиться, что они используются.Например, у вас может быть токен доступа, модуль может хранить этот токен и всегда добавляться к любому запросу.При ручном вызове axios вы должны помнить это
  • , вы отделены от axios (до некоторой степени) (1).При использовании модуля вам на самом деле все равно, выполняют ли его запросы аксиосы.
  • Вы можете добавить дополнительные вызовы API к модулю, которые вы сможете использовать в будущем.Я ожидаю, что файл xyz будет расти со временем, и ваш вызов faceeBookCampaign в итоге станет методом для переменной rest.Имеет больше смысла в конечном итоге использовать this.client, а не something, но это зависит от разработчиков.
  • он хранит все вызовы API REST в одном месте, позволяя вам создать SDK для этого API,который по мере роста проекта может иметь свой собственный жизненный цикл.

(1) Я говорю, что id в некоторой степени разъединяет вас, потому что есть семантика, которую необходимо сохранить, чтобы все работало.Возвращенный объект должен иметь метод запроса, который принимает объект конфигурации.Конфиг должен соответствовать той же структуре, что и Axios.Но вы всегда можете написать адаптер для этого, так что вы на самом деле отделены от axios.

0 голосов
/ 04 марта 2019

request здесь принимает конфиг и возвращает обещание.Я предполагаю, что этот подход обычно используется, когда вы хотите повторно использовать объект запроса, созданный с использованием create (по крайней мере, в моем смысле).

Мне кажется, что метод request используется для перезаписи начальной конфигурации новой, определенной в API.И двойной withCredentials должен быть недосмотр.ИЛИ, поскольку API определяет новый объект конфигурации, поэтому при определении без withCredentials он перезаписывает конфигурацию create.

Следовательно, это выглядит как указано дважды.

...