หากคุณกำลังมองหาโครงการเล็กๆ เพื่อฝึกฝนและฝึกฝนทักษะ Ruby ของคุณ แสดงว่าคุณมาถูกที่แล้ว
วันนี้ฉันต้องการสร้างแอปพลิเคชัน "ตัวย่อลิงก์" ร่วมกับคุณ
ตัวย่อลิงก์คืออะไร
ฉันแน่ใจว่าคุณเคยเห็นพวกเขามาก่อน…
“ลิงก์สั้น ๆ” เหล่านี้ เช่น:
https://t.co/eKBRm2tTUF
เมื่อคุณเยี่ยมชม URL นี้ คุณจะถูกเปลี่ยนเส้นทางไปยัง URL เดิม
แต่มันทำงานอย่างไร
แนวคิดคือการแมปโค้ดนี้ eKBRm2tTUF
ในตัวอย่างไปยัง URL เดิมในฐานข้อมูลของเรา
เป็นแนวคิดที่เรียบง่าย แต่มีบางสิ่งที่เราต้องจัดการ
ชอบ…
จะสร้างรหัสนี้ได้อย่างไร? คุณจะจับคู่กับ URL แบบเต็มได้อย่างไร
เริ่มกันเลย!
ก้าวแรก
ฉันจะใช้ซินาตราในเรื่องนี้เพราะไม่ต้องมีการตั้งค่าใดๆ เลย เราจึงสามารถดำเนินการได้ทันที
และแทนที่จะเป็นฐานข้อมูล SQL ทั่วไป ฉันจะทำบางอย่างที่แตกต่างออกไปด้วย
อ่านต่อเพื่อดูว่ามันคืออะไร 🙂
นี่คือรหัสเริ่มต้น :
require 'sinatra' get '/:url' do "The URL is #{params[:url]}" end get '/' do "Send a POST request to register a new URL." end post '/' do "New URL added: #{params[:url]}\n" end
นี่คือแอป Sinatra แบบง่ายๆ ที่มีการดำเนินการ 3 อย่าง หรือกำหนดเส้นทางหากต้องการ
เราสามารถเยี่ยมชมแอปพลิเคชันของเราและเราจะได้รับข้อความ "ส่งคำขอ POST"
เราจะทำอย่างนั้นได้อย่างไร
คุณสามารถใช้ปลั๊กอินของเบราว์เซอร์เช่นบุรุษไปรษณีย์ได้
แต่ฉันชอบใช้ curl
เพื่อสิ่งนี้
เป็นเครื่องมือที่มีประโยชน์ซึ่งคุณควรติดตั้งในระบบปฏิบัติการใด ๆ และจะช่วยให้คุณโต้ตอบกับแอป Sinatra ของคุณได้
การส่งคำขอ POST
หากคุณกำลังติดตามคุณควรให้แอป Sinatra ของคุณทำงาน &curl
ติดตั้งบนเครื่องของคุณ
ตอนนี้คุณสามารถส่งคำขอ POST ดังนี้:
curl localhost:4567 --data "url=rubyguides.com" -X POST
สิ่งนี้ควรพิมพ์ข้อความ “เพิ่ม URL ใหม่” บนเทอร์มินัลของคุณ
เยี่ยมมาก!
ขั้นตอนต่อไปคือการแมป URL นี้กับ URL ที่สั้นลง
มาดูกันว่าเราจะทำได้อย่างไร
การทำแผนที่ URL
สำหรับการทำแผนที่ คุณสามารถทำได้โดยใช้สตริงสุ่ม ใช้ฟังก์ชันแฮช หรือใช้การเข้ารหัสบางประเภท
นี่เป็นวิธีหนึ่งที่จะทำได้:
LETTERS = Array('a'..'z') def generate_short_url Array.new(6) { LETTERS.sample }.join end
ในกรณีนี้ ฉันจะใช้สตริงสุ่ม 6 อักขระ
ดูวิดีโอหากคุณต้องการดูวิธีอื่นในการทำ
ซึ่งจะทำให้เรามี “รหัสย่อ” ที่เราจะใช้เพื่อจับคู่ URL ดั้งเดิมกับ URL แบบสั้น
จะเป็นอย่างไรต่อไป
เราจำเป็นต้องบันทึกรหัสนี้ไว้ที่ใดที่หนึ่งเพื่อที่เราจะได้เปลี่ยนเส้นทางผู้ใช้ไปยังตำแหน่งที่เหมาะสมได้
ฐานข้อมูล “NoSQL” ของเรา
สำหรับโครงการนี้ ฉันแค่ต้องการใช้ฐานข้อมูลอย่างง่าย
และอะไรจะง่ายกว่าแค่ใช้ไฟล์ใช่ไหม
ไลบรารีมาตรฐานของ Ruby มีคลาส PSstore นี้ซึ่งจะช่วยเราจัดการข้อมูล
เหมาะสำหรับแอปพลิเคชันขนาดเล็กเช่นของเรา
นี่คือรหัส :
class ShortURL def self.save(code, original) store.transaction { |t| t =ต้นฉบับ } สิ้นสุด def self.read (รหัส) store.transaction { |t| t } end def self.store @store ||=PStore.new("short_urls.db") สิ้นสุด
มีบางอย่างเกิดขึ้นที่นี่
อันดับแรก เรามี store
. นี้ วิธีการเข้าถึง PStore
. ของเรา วัตถุ
จากนั้นเราก็มี save
&read
วิธีการ
คุณจะสังเกตเห็นว่า PStore
ทำตัวเหมือนแฮช ด้วยความแตกต่างที่ทุกการดำเนินการจำเป็นต้องเกิดขึ้นภายในบล็อกธุรกรรม
ตอนนี้ เราสามารถอัปเดตแอป Sinatra ของเราเพื่อใช้ ShortURL
คลาส:
require 'sinatra' get '/:url' do redirect "https://" + ShortURL.read(params[:url]) end get '/' do "Send a POST request to register a new URL." end post '/' do ShortURL.save(generate_short_url, params[:url]) "New URL added: localhost:4567/#{generate_short_url}\n" end
เท่านั้นแหละ!
ขณะนี้เรามีตัวย่อลิงก์ที่ใช้งานได้
เคล็ดลับแบบมือโปร:คุณสามารถใช้อัญมณีปืนลูกซองเพื่อโหลดแอป Sinatra ใหม่โดยอัตโนมัติเมื่อคุณทำการเปลี่ยนแปลงโค้ด
ยังมีงานให้ทำอีก เช่น เพิ่มฟอร์มจะได้ไม่ต้องใช้ curl
เพื่อส่ง URL ใหม่
แสดงข้อความบางส่วนหาก URL ไม่อยู่ในฐานข้อมูล
และกำลังตรวจสอบรายการซ้ำ ดังนั้นเราจึงไม่เขียนทับ URL อื่น
ฉันจะปล่อยให้มันเป็นการบ้านให้คุณ 🙂
สรุป
คุณได้เรียนรู้วิธีสร้างแอปพลิเคชัน Link Shortener โดยใช้ Ruby, Sinatra &PStore! คุณยังได้เรียนรู้วิธีส่งคำขอ POST โดยใช้ curl
ไคลเอนต์ http
อย่าลืมแชร์บทความนี้กับเพื่อน ๆ เพื่อให้คนอื่นได้เรียนรู้