JSON API
JSON を返します。
「JSON API」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
JSON APIが必要な理由
JSONはWeb APIの標準的なデータ形式です。クライアントはHTMLではなく、構造化されたデータを送受信します。
- 言語に依存しません
- Rubyのハッシュや配列に自然に対応します
- 軽量で人間にも読みやすい形式です
Rubyの標準ライブラリでは、json モジュールを使ってJSONを処理します。
require 'json'
data = { name: 'Ada', langs: ['Ruby', 'Python'] }
puts data.to_jsonRubyを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]SinatraからJSONを返す
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
endJSONリクエスト本文を読み取る
POST APIでは、本文をそのまま読み取り、パースします。
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
endAPIレスポンス用のハッシュを構築する
シリアライズする前に構造化されたハッシュを構築すると、レスポンスの形式を統一できます。
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 Bad Requestを返します
- パースエラーでアプリをクラッシュさせないでください
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に関する知識を確認しましょう。
まとめ
JSON APIの構築方法を学びました。
- 標準ライブラリから
require 'json'を読み込みます to_json/JSON.generateでRubyをJSONにシリアライズしますJSON.parseで受信したJSONをデシリアライズします- Sinatraのルートで
content_type :jsonを設定します - 必ず
JSON::ParserErrorをレスキューします
次はRackとミドルウェアについて学びます。
よくある質問
「JSON API」レッスンは無料ですか?
はい。「JSON API」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「JSON API」で何を学びますか?
JSON を返します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「JSON API」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。