0Pricing
Ruby Academy · Урок

API JSON

Возвращайте JSON

«API JSON» — бесплатный урок Ruby Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.

Зачем нужны API JSON

JSON — стандартный формат данных для веб-API. Клиенты отправляют и получают структурированные данные вместо HTML.

  • Не зависит от языка программирования
  • Удобно преобразуется в хеши и массивы Ruby
  • Компактен и понятен человеку

Стандартная библиотека Ruby работает с JSON через модуль json.

require 'json'

data = { name: 'Ada', langs: ['Ruby', 'Python'] }
puts data.to_json

Преобразование Ruby в JSON

Вызовите to_json для хеша или массива либо используйте JSON.generate.

  • Символы и строки становятся ключами JSON
  • Вложенные структуры преобразуются рекурсивно
require 'json'

user = { id: 1, active: true, tags: ['admin'] }
puts JSON.generate(user)

Форматированный вывод JSON

Для удобного чтения используйте JSON.pretty_generate.

  • Добавляет отступы и переносы строк
  • Отлично подходит для отладки и журналов
  • Не используйте в ответах рабочей среды, чтобы экономить байты
require 'json'

config = { server: { host: 'localhost', port: 4567 } }
puts JSON.pretty_generate(config)

Разбор входных данных JSON

Используйте JSON.parse, чтобы преобразовать входящую строку JSON в объекты Ruby.

  • По умолчанию ключи являются строками
  • Передайте symbolize_names: true, чтобы использовать ключи-символы
require 'json'

raw = '{"name": "Ada", "age": 30}'
data = JSON.parse(raw)
puts data['name']
puts data['age']

Ключи-символы

Ключи-символы удобны и позволяют немного быстрее выполнять поиск.

  • Включите их с помощью symbolize_names: true
  • Будьте осторожны: недоверенные входные данные могут создать множество символов
require 'json'

raw = '{"city": "Istanbul"}'
data = JSON.parse(raw, symbolize_names: true)
puts data[:city]

Возврат JSON из Sinatra

В маршруте Sinatra задайте тип содержимого и верните строку JSON.

  • content_type :json задаёт заголовок
  • Верните hash.to_json в качестве тела ответа
require 'sinatra'
require 'json'

get '/api/status' do
  content_type :json
  { status: 'ok', time: Time.now.to_i }.to_json
end

Чтение тела JSON-запроса

Для API с методом POST прочитайте необработанное тело запроса и разберите его.

  • request.body.read возвращает необработанную строку
  • Разберите её с помощью JSON.parse
require 'sinatra'
require 'json'

post '/api/users' do
  payload = JSON.parse(request.body.read)
  content_type :json
  { created: payload['name'] }.to_json
end

Создание хеша ответа API

Чтобы ответы были единообразными, перед сериализацией создайте структурированный хеш.

  • Поместите данные под ключом data
  • Включите статус и метаданные
require 'json'

def api_response(data, status: 'ok')
  { status: status, data: data }.to_json
end

puts api_response({ id: 1, name: 'Ada' })

Обработка ошибок разбора

Некорректный JSON вызывает исключение JSON::ParserError. Всегда перехватывайте его.

  • Верните клиенту ответ 400 «Некорректный запрос»
  • Никогда не позволяйте ошибке разбора приводить к сбою приложения
require 'json'

begin
  JSON.parse('{ broken')
rescue JSON::ParserError => e
  puts "Invalid JSON: #{e.message}"
end

Сериализация массивов объектов

Коллекции естественным образом сериализуются в массивы JSON.

  • Массив хешей превращается в массив объектов
  • Используйте map, чтобы сформировать каждую запись
require 'json'

users = [{ id: 1, name: 'Ada' }, { id: 2, name: 'Bob' }]
output = users.map { |u| { name: u[:name] } }
puts output.to_json

Пользовательский to_json для объектов

Вы можете научить класс сериализовать данные, определив to_json или as_json.

  • Преобразуйте внутреннее состояние в обычный хеш
  • Скройте закрытые поля от API
require 'json'

class User
  def initialize(id, name)
    @id = id
    @name = name
  end

  def to_json(*)
    { id: @id, name: @name }.to_json
  end
end

puts User.new(1, 'Ada').to_json

Проверка

Проверьте свои знания о JSON API.

Повторение

Вы научились создавать API на основе JSON:

  • Подключать require 'json' из стандартной библиотеки
  • Сериализовать Ruby в JSON с помощью to_json / JSON.generate
  • Десериализовать входящий JSON с помощью JSON.parse
  • Задавать content_type :json в маршрутах Sinatra
  • Всегда перехватывать JSON::ParserError

Далее вы изучите Rack и промежуточное ПО.

Часто задаваемые вопросы

Урок «API JSON» бесплатный?

Да — полный текст урока «API JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.

Чему я научусь в уроке «API JSON»?

Возвращайте JSON Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ruby Academy?

Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «API JSON»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ruby Academy?

Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы Sinatra
  2. Маршруты и параметры
  3. API JSON
  4. Промежуточное ПО и Rack
← Назад к Ruby Academy