0Pricing
Ruby Academy · บทเรียน

API แบบ JSON

ส่งคืน JSON

API แบบ JSON เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

ทำไมจึงใช้เอพีไอ JSON

JSON เป็นรูปแบบข้อมูลมาตรฐานสำหรับเอพีไอเว็บ ไคลเอนต์จะส่งและรับข้อมูลที่มีโครงสร้างแทน HTML

  • ไม่ขึ้นกับภาษา
  • แปลงเข้ากับแฮชและอาร์เรย์ของรูบีได้อย่างเป็นธรรมชาติ
  • มีน้ำหนักเบาและอ่านได้ง่าย

ไลบรารีมาตรฐานของรูบีจัดการ JSON ผ่านโมดูล json

require 'json'

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

การแปลงรูบีเป็น 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 ขาเข้าให้เป็นออบเจ็กต์ของรูบี

  • โดยค่าเริ่มต้น คีย์จะเป็นสตริง
  • ส่ง 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

ตรวจสอบความรู้

ยืนยันความรู้เกี่ยวกับ API ของ JSON

ทบทวน

คุณได้เรียนรู้การสร้างAPI ของ JSONดังนี้

  • require 'json' จากไลบรารีมาตรฐาน
  • to_json / JSON.generate ใช้แปลง Ruby เป็น JSON แบบอนุกรม
  • JSON.parse ใช้แปลง JSON ที่เข้ามากลับเป็นข้อมูล
  • ตั้งค่า content_type :json ในเส้นทางของ Sinatra
  • จัดการ JSON::ParserError เสมอ

ถัดไปคุณจะสำรวจ Rack และมิดเดิลแวร์

คำถามที่พบบ่อย

บทเรียน “API แบบ JSON” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “API แบบ JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “API แบบ JSON”

ส่งคืน JSON คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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