В последнее время я работал над приложением React, которое поддерживает Rails API, и одна вещь, которая меня раздражает, - это то, что Javascript и Rails имеют разные соглашения об именах для переменных.

# In rails snake case is the way to go
params = {
  first_name: "Mike",
  last_name: "Parton"
}
// But in javascript camel case is preferred
params = {
  firstName: "Mike",
  lastName: "Parton"
}

Чтобы мое приложение React могло взаимодействовать с API, эти параметры должны быть одинаковыми. Я мог бы просто попробовать не забыть использовать snake case для всех связанных с API переменных в моем Javascript, но в какой-то момент я неизбежно допущу ошибку.

Есть лучшее решение.

Я использую Axios в качестве своего http-клиента, потому что у него отличный API и несколько хороших опций для настройки. Когда вы создаете клиент Axios, вы можете передавать свои собственные функции для преобразования данных, входящих и исходящих из вашего API. Используя библиотеку утилит горбы, легко убедиться, что данные, поступающие с рельсов, преобразуются в футляр для верблюда, а все почтовые данные отправляются в виде футляра для змей.

import axios from 'axios'
import humps from 'humps'
const api = axios.create({
  baseURL: YOUR_API_ENDPOINT_HERE,
  transformResponse: [
    ...axios.defaults.transformResponse,
    data => humps.camelizeKeys(data)
  ],
  transformRequest: [
    data => humps.decamelizeKeys(data),
    ...axios.defaults.transformRequest
  ]
})

Axios поставляется со своими собственными функциями преобразования, которые также необходимо применить. Порядок важен, чтобы гарантировать, что наши преобразования не выполняются в строковом объекте данных.

Благодаря этой настройке я теперь могу использовать свой API и никогда не беспокоиться о соглашениях об именах Rails в моем Javascript.