เส้นทางและพารามิเตอร์
จัดการ HTTP
เส้นทางและพารามิเตอร์ เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
การจัดการคำขอเอชทีทีพี
เว็บแอปพลิเคชันตอบสนองคำขอด้วยการจับคู่เส้นทางและอ่านพารามิเตอร์
- ส่วนต่าง ๆ ของเส้นทางสามารถเปลี่ยนแปลงได้
- สตริงคำค้นใช้ส่งข้อมูลเพิ่มเติม
- เนื้อหาของแบบฟอร์มใช้ส่งช่องข้อมูล
ซินาตราเปิดเผยข้อมูลทั้งหมดนี้ผ่านแฮช params
require 'sinatra'
get '/echo' do
params['msg'].to_s
endพารามิเตอร์ที่มีชื่อของเส้นทาง
เครื่องหมายโคลอนในเส้นทางจะกำหนดพารามิเตอร์ที่มีชื่อซึ่งใช้จับส่วนหนึ่งของเส้นทาง
/users/:idตรงกับ/users/42- ค่าที่จับได้จะปรากฏใน
params['id']
require 'sinatra'
get '/users/:id' do
"User ID is #{params['id']}"
endพารามิเตอร์หลายรายการ
เส้นทางหนึ่งเส้นทางสามารถมีพารามิเตอร์ที่มีชื่อได้หลายรายการ
- ส่วนที่ขึ้นต้นด้วยโคลอนแต่ละส่วนจะกลายเป็นคีย์ใน
params - ลำดับในเส้นทางไม่มีผลต่อการเข้าถึง
require 'sinatra'
get '/posts/:year/:month' do
"Posts from #{params['month']}/#{params['year']}"
endพารามิเตอร์สตริงคำค้น
ค่าของสตริงคำค้นที่อยู่หลัง ? จะถูกใส่ไว้ใน params ด้วย
/search?q=rubyให้ค่าparams['q'] == 'ruby'- คู่ค่าหลายคู่จะแยกจากกันด้วย
&
require 'sinatra'
get '/search' do
"Searching for: #{params['q']}"
endการทำงานกับพารามิเตอร์ในรูปแบบแฮช
ออบเจ็กต์ params ทำงานคล้ายแฮชของรูบี การฝึกใช้แฮชธรรมดาจะช่วยให้เห็นรูปแบบต่าง ๆ ได้ชัดเจน
- ใช้
fetchพร้อมค่าเริ่มต้นเพื่อความปลอดภัย - โดยทั่วไปคีย์จะเป็นสตริง
params = { 'name' => 'Ada', 'lang' => 'Ruby' }
puts params['name']
puts params.fetch('age', 'unknown')ข้อมูลแบบฟอร์มด้วย POST
สำหรับคำขอ post ช่องข้อมูลของแบบฟอร์มที่ส่งมาจะปรากฏใน params ด้วย
- ซินาตราจะแยกวิเคราะห์เนื้อหาคำขอโดยอัตโนมัติ
- รูปแบบการเข้าถึงเหมือนกับพารามิเตอร์คำค้น
require 'sinatra'
post '/signup' do
"Welcome, #{params['username']}"
endพารามิเตอร์สำหรับจับส่วนที่เหลือ
ตัวจับส่วนที่เหลือ (*) จะจับอักขระจำนวนเท่าใดก็ได้ และเก็บไว้ในอาร์เรย์ params['splat']
/files/*จะจับส่วนที่เหลือของเส้นทาง- ตัวจับส่วนที่เหลือหลายตัวจะสร้างรายการหลายรายการในอาร์เรย์
require 'sinatra'
get '/files/*' do
"Path: #{params['splat'].first}"
endเส้นทางแบบไม่บังคับและนิพจน์ทั่วไป
เส้นทางสามารถใช้นิพจน์ทั่วไปเพื่อจับคู่ได้อย่างแม่นยำ
- ค่าที่จับได้จะอยู่ใน
params['captures'] - มีประโยชน์สำหรับข้อจำกัด เช่น อนุญาตเฉพาะรหัสตัวเลข
require 'sinatra'
get %r{/item/(\d+)} do
"Item #{params['captures'].first}"
endการตรวจสอบความถูกต้องของพารามิเตอร์
โปรดตรวจสอบและแปลงพารามิเตอร์ขาเข้าเสมอ เนื่องจากพารามิเตอร์เหล่านี้เข้ามาในรูปแบบสตริง
- ใช้
to_iหรือInteger()สำหรับตัวเลข - ปฏิเสธค่าที่จำเป็นซึ่งหายไปพร้อมแสดงข้อผิดพลาดที่ชัดเจน
def parse_id(raw)
id = Integer(raw)
raise 'must be positive' if id <= 0
id
end
puts parse_id('42')ค่าเริ่มต้น
กำหนดค่าเริ่มต้นที่เหมาะสมให้พารามิเตอร์ที่ไม่บังคับ เพื่อหลีกเลี่ยงข้อผิดพลาดจากค่าที่ว่างเปล่า
params.fetch('page', '1')- ใช้ร่วมกับการแปลงค่าเพื่อแบ่งหน้าอย่างปลอดภัย
params = { 'page' => nil }
page = (params['page'] || '1').to_i
puts "Page: #{page}"การเปลี่ยนเส้นทาง
ใช้ redirect เพื่อส่งไคลเอนต์ไปยังยูอาร์แอลอื่น
- โดยค่าเริ่มต้นจะส่งสถานะ 302
- มักใช้หลังจากส่งแบบฟอร์มสำเร็จ
require 'sinatra'
post '/login' do
redirect '/dashboard'
endตรวจสอบความเข้าใจ
ตรวจสอบความรู้ของคุณเกี่ยวกับเส้นทางและพารามิเตอร์
สรุป
คุณได้เรียนรู้วิธีที่ซินาตราจัดการข้อมูลขาเข้า:
- พารามิเตอร์ที่มีชื่อใช้
:nameในเส้นทาง - สตริงคำค้นและช่องข้อมูลของแบบฟอร์มจะเติมข้อมูลลงใน
paramsด้วย - ตัวจับส่วนที่เหลือและเส้นทางนิพจน์ทั่วไปใช้จับเส้นทางที่ยืดหยุ่น
- ตรวจสอบและแปลงพารามิเตอร์ที่เป็นสตริงเสมอ
- ใช้
redirectเพื่อย้ายไคลเอนต์ระหว่างยูอาร์แอล
ต่อไป คุณจะส่งคืนการตอบสนอง JSON แบบมีโครงสร้าง
คำถามที่พบบ่อย
บทเรียน “เส้นทางและพารามิเตอร์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เส้นทางและพารามิเตอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เส้นทางและพารามิเตอร์”
จัดการ HTTP คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “เส้นทางและพารามิเตอร์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Sinatra
- เส้นทางและพารามิเตอร์
- API แบบ JSON
- มิดเดิลแวร์และ Rack