0Pricing
Ruby Academy · Lekcja

API JSON

Zwracanie JSON

API JSON to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Dlaczego API JSON?

JSON jest standardowym formatem danych dla internetowych API. Klienci wysyłają i odbierają ustrukturyzowane dane zamiast kodu HTML.

  • Niezależny od języka
  • Łatwo odwzorowuje się na hashe i tablice Ruby
  • Lekki i czytelny dla człowieka

Biblioteka standardowa Ruby obsługuje JSON za pomocą modułu json.

require 'json'

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

Konwertowanie Ruby do JSON

Należy wywołać to_json na hashu lub tablicy albo użyć JSON.generate.

  • Symbole i ciągi znaków stają się kluczami JSON
  • Zagnieżdżone struktury są konwertowane rekursywnie
require 'json'

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

Formatowanie JSON

Aby uzyskać czytelny wynik, należy użyć JSON.pretty_generate.

  • Dodaje wcięcia i znaki nowego wiersza
  • Świetnie nadaje się do debugowania i logów
  • W odpowiedziach produkcyjnych należy go unikać, aby oszczędzać bajty
require 'json'

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

Analizowanie danych wejściowych JSON

Należy użyć JSON.parse, aby przekształcić przychodzący ciąg JSON w obiekty Ruby.

  • Domyślnie klucze są ciągami znaków
  • Argument symbolize_names: true umożliwia używanie kluczy będących symbolami
require 'json'

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

Klucze będące symbolami

Klucze będące symbolami są wygodne i można je wyszukiwać nieco szybciej.

  • Należy je włączyć za pomocą symbolize_names: true
  • Należy uważać na niezaufane dane wejściowe, które mogą tworzyć dużą liczbę symboli
require 'json'

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

Zwracanie JSON-u z Sinatra

W trasie Sinatra należy ustawić typ zawartości i zwrócić ciąg znaków JSON.

  • content_type :json ustawia nagłówek
  • Zwróć hash.to_json jako treść odpowiedzi
require 'sinatra'
require 'json'

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

Odczytywanie treści żądania JSON

W przypadku interfejsów API POST należy odczytać surową treść żądania i ją sparsować.

  • request.body.read zwraca surowy ciąg znaków
  • Przeprowadź parsowanie za pomocą 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

Budowanie hasha odpowiedzi API

Aby zachować spójność odpowiedzi, przed serializacją należy zbudować ustrukturyzowany hash.

  • Umieść dane pod kluczem data
  • Dołącz status i metadane
require 'json'

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

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

Obsługa błędów parsowania

Nieprawidłowo sformatowany JSON zgłasza JSON::ParserError. Zawsze należy go obsłużyć.

  • Zwróć klientowi błąd 400 Bad Request
  • Nie dopuszczaj, aby błąd parsowania zakończył działanie aplikacji
require 'json'

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

Serializowanie tablic obiektów

Kolekcje są naturalnie serializowane jako tablice JSON.

  • Tablica hashy staje się tablicą obiektów
  • Użyj map, aby nadać kształt każdemu rekordowi
require 'json'

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

Niestandardowe to_json dla obiektów

Można nauczyć klasę serializowania, definiując to_json lub as_json.

  • Przekształć stan wewnętrzny w zwykły hash
  • Ukryj prywatne pola przed 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

Szybkie sprawdzenie

Proszę sprawdzić znajomość API JSON.

Podsumowanie

Nauczyli się Państwo budować interfejsy API JSON:

  • require 'json' pochodzi ze standardowej biblioteki
  • to_json / JSON.generate serializują kod Ruby do formatu JSON
  • JSON.parse deserializuje przychodzący JSON
  • Ustawiaj content_type :json w trasach Sinatra
  • Zawsze obsługuj JSON::ParserError

W następnej części poznają Państwo Rack i middleware.

Często zadawane pytania

Czy lekcja „API JSON” jest bezpłatna?

Tak — pełny tekst „API JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „API JSON”?

Zwracanie JSON Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „API JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Sinatry
  2. Trasy i parametry
  3. API JSON
  4. Middleware i Rack
← Powrót do Ruby Academy