Як дозволити JSON тільки певні змінні для передачі через API у Ruby on Rails

У Ruby on Rails для передачі даних у форматі JSON через API часто використовують метод .as_json. Він дозволяє гнучко керувати тим, які поля моделі будуть включені у відповідь API. Це важливо для безпеки та оптимізації, оскільки дозволяє передавати тільки необхідну інформацію та захищати чутливі дані.

Використання .as_json()

Якщо вам потрібно передати лише певні атрибути об’єкта, наприклад, name та email, ви можете скористатися опцією only. Це дозволяє явно вказати, які поля слід включити у відповідь.

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    render json: @user.as_json(only: [:name, :email])
  end
end

Пояснення:

  • @user.as_json(only: [:name, :email]) — виклик методу .as_json для серіалізації об’єкта користувача у формат JSON з опцією only, яка обмежує вихідний набір полів лише атрибутами name та email.
  • В цьому випадку будь-які інші атрибути, такі як password, created_at, або інші поля моделі User, не будуть включені у відповідь API.

Приклад відповіді JSON:

Припустимо, у вас є користувач із такими даними:

@user = User.find(1)
@user.name = "John Doe"
@user.email = "john.doe@example.com"
@user.password = "securepassword123"

# In UsersController
render json: @user.as_json(only: [:name, :email])

Відповідь API буде виглядати так:

{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

Атрибут password та інші поля, такі як created_at чи updated_at, не будуть передані, оскільки вони не вказані у списку дозволених полів.

Переваги використання .as_json з опцією only:

  1. Безпека: Ви можете легко виключати чутливі дані, такі як паролі або інші конфіденційні поля, з JSON-відповіді.
  2. Оптимізація: Передача тільки необхідних полів зменшує обсяг даних, що передаються через API, що покращує продуктивність.
  3. Простота: Використання опції only дозволяє чітко і просто визначити, які поля повинні бути включені у відповідь.