Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Tạo ứng dụng rút gọn Link với Ruby & Sinatra – Hướng dẫn từng bước

Nếu bạn tìm dự án nhỏ để thực hành & luyện kỹ năng Ruby thì bạn đang ở nơi đúng.

Hôm nay tôi muốn xây dựng ứng dụng “link shortener” (rút gọn liên kết) cùng bạn.

Link shortener là gì?

Tôi chắc bạn đã thấy…

Những “short links” như:

https://t.co/eKBRm2tTUF

Khi truy cập URL này bạn được chuyển hướng đến URL gốc.

Nhưng nó hoạt động như thế nào?

Ý tưởng là ánh xạ mã này, eKBRm2tTUF trong ví dụ, đến URL gốc trên database.

Khái niệm đơn giản, nhưng có vài điều cần xử lý.

Như…

Làm sao tạo mã này? Làm sao khớp với URL đầy đủ?

Vậy bắt đầu!

Các bước đầu

Tôi dùng Sinatra vì nó không cần setup, bắt đầu ngay.

Và thay vì database SQL điển hình tôi cũng làm khác.

Đọc tiếp để biết 🙂

Mã khởi tạo:

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

Đây là app Sinatra đơn giản với 3 action (route).

Truy cập app nhận thông báo “Send a POST request”.

Làm sao làm điều đó?

Dùng plugin trình duyệt như Postman.

Nhưng tôi thích dùng curl.

Nó công cụ tiện cài trên mọi OS & cho tương tác với app Sinatra.

Gửi POST Request

Nếu bạn theo dõi bạn nên có app Sinatra chạy & curl cài trên máy.

Bây giờ gửi POST request:

curl localhost:4567 --data "url=rubyguides.com" -X POST

Nên in thông báo “New URL added” trên terminal.

Tuyệt!

Bước tiếp theo ánh xạ URL này đến URL ngắn hơn.

Hãy xem cách làm.

Ánh xạ URL

Để ánh xạ bạn có thể dùng chuỗi ngẫu nhiên, hàm hash hoặc encoding.

Một cách:

LETTERS = Array('a'..'z')
def generate_short_url
  Array.new(6) { LETTERS.sample }.join
end

Tôi chọn chuỗi ngẫu nhiên 6 ký tự.

Xem video nếu muốn cách khác.

Điều này cho “mã ngắn” để ánh xạ URL gốc đến URL ngắn.

Tiếp theo?

Cần lưu mã đâu đó để redirect user đúng chỗ.

Database “NoSQL” của chúng ta

Dự án này tôi chỉ muốn database đơn giản.

Đơn giản hơn dùng file, đúng không?

Thư viện chuẩn Ruby có class PStore giúp quản lý dữ liệu.

Tuyệt cho app nhỏ như này.

Mã:

class ShortURL
  def self.save(code, original)
    store.transaction { |t| t[code] = original }
  end
  def self.read(code)
    store.transaction { |t| t[code] }
  end
  def self.store
    @store ||= PStore.new("short_urls.db")
  end
end

Có vài điều diễn ra.

Đầu tiên, phương thức store truy cập đối tượng PStore.

Sau đó save & read.

Bạn thấy PStore hành xử như hash. Khác là mọi thao tác cần trong block transaction.

Bây giờ cập nhật app Sinatra dùng class 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

Và xong!

Chúng ta có link shortener hoạt động.

Pro Tip: Dùng gem shotgun để auto-reload app Sinatra khi thay đổi mã.

Còn việc làm: thêm form để không dùng curl submit URL.

Hiển thị thông báo nếu URL không trong database.

Và kiểm tra trùng lặp, để không ghi đè URL khác.

Tôi để đó làm bài tập về nhà 🙂

Tóm tắt

Bạn đã học xây dựng Link Shortener dùng Ruby, Sinatra & PStore! Cũng học gửi POST request dùng curl http client.

Đừng quên chia sẻ bài viết với bạn bè để nhiều người học.