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_jsonto_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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ