Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 8) - Các kỹ thuật trong Rails bạn nên biết(3)

Chào các bạn,

Hôm nay mình sẽ tiếp tục Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 8) - Các kỹ thuật trong Rails bạn nên biết - 3 Ở phần này mình sẽ giới thiệu về các Ruby Gem mà mình đã làm qua, đã biết và mình nghĩ các bạn đang bắt đầu học về Ruby on Rails cũng nên biết về tụi nó vì có thể sau này sẽ hỗ trợ hoặc định hướng các cách làm trong các dự án thực tế :v

Trong bài này khi giới thiệu các gem mình đều có đính kèm phần Guideline hướng dẫn sử dụng gem ấy tương ứng để các bạn tiện theo dõi, các bài viết này đều là của các tác giả khác mà mình thấy hay nên trích dẫn,...rất cám ơn các tác giả của các bài viết hướng dẫn bên dưới ạ (lay4)

Gem Support

Gem hỗ trợ authentication sign_in/sign_up/logout/...

Gem hỗ trợ phân quyền user

Trong một hệ thống lớn có thể bạn muốn phân quyền cho từng User chỉ được thực hiện một số chức năng nhất định, truy cập vào một số trang nhất định thì những gem sau đây sẽ giúp các bạn thực hiện điều đấy.

Gem hỗ trợ mã hóa password

  • bcrypt: https://github.com/codahale/bcrypt-ruby Đây là gem giúp người dùng có thể dễ dàng mã hóa được password lưu xuống database để tránh trường hợp nếu một ngày đẹp trời Hacker tấn công hệ thống của bạn và đánh cắp mật khẩu của user, mật khẩu của user đôi khi có thể sử dụng cho nhiều tài khoản khác nhau: tk ngân hàng, tkợ thanh toán trực tuyến, atm,... Nên việc mã hóa password của User là một bước giúp tăng security cho hệ thống của bạn (ngon) Và do cơ chế mã hóa được bcrypt sử dụng là cơ chế mã hóa một chiều nên dù Hacker có lấy được đoạn hash password thì việc tìm ra password là điều khó có thể xảy ra :v Guideline: https://github.com/codahale/bcrypt-ruby#how-to-use-bcrypt-in-your-rails-application
  • scrypt: https://github.com/pbhogan/scrypt Đây cũng là một gem giúp người dùng mã hóa password của user khi lưu xuống db. Theo như tài liệu của nó thì nếu mất 5 giây để sinh ra 1 key nhằm tìm mật khẩu của bạn từ chuỗi hash thì chi phí để tổ chức một cuộc tấn công như thế vào scrypt sẽ gấp 4000 lần so với bcrypt và gấp 20000 lần so với việc sử dụng mã hóa PBKDF2 Con số khá là ấn tượng đấy, dự án sau chắc mình sẽ lưu ý dùng con này thay cho bcrypt xem sao 😄

Gem hỗ trợ config các giá trị mặc định

  • config: https://github.com/railsconfig/config Đây là gem giúp các bạn dễ dàng quản lý các giá trị mặc định một cách dễ dàng sử dụng định dạng file YAML, ngoài ra còn giúp quản lý các giá trị này tùy thuộc theo từng môi trường: DEV, STAGING, PRODUCTION,... Guideline: trang chủ của nó đã trình bày khá rõ các bước install, các bạn vào đọc nhé.

  • mixlib-config: https://github.com/chef/mixlib-config Đây cũng là gem giúp quản lý giá trị mặc định trong project

Gem hỗ trợ phân trang

  • kaminari: https://github.com/kaminari/kaminari Đây là gem giúp các bạn thực hiện phân trang các record trong Model một cách dễ dàng khi bạn muốn show list record trong Model ấy lên view. Guideline: trang chủ của nó đã viết hướng dẫn rất kỹ.
  • will_paginate: https://github.com/mislav/will_paginate will_paginate là một gem có chức năng tương tự như kaminari nó cũng được dùng để thực hiện phân trang, hai gem này đều đang dẫn đầu về số lượng được download sử dụng trên trang https://rubygems.org/. Tuy nhiên theo một số nhận định thì kaminari do dễ dàng custom view hiển thị và install hơn nên đang được sử dụng nhỉnh hơn một chút.

Gem hỗ trợ tìm kiếm

  • ransack: https://github.com/activerecord-hackery/ransack Đây là gem giúp các bạn thực hiện search theo các fields trong ActiveRecord, ngoài ra còn hỗ trợ search form đối với các ứng dụng có chức năng cho phép end-user search dữ liệu, hỗ trợ search thông qua ajax,...
  • searchkick: https://github.com/ankane/searchkick Đây là gem giúp các bạn thực hiện Elasticsearch đối với bất kì model nào mà các bạn muốn. Ngoài ra nó còn hỗ trợ
    • Getting Started
    • Querying
    • Indexing
    • Instant Search / Autocomplete
    • Aggregations
    • Deployment
    • Performance
    • Elasticsearch DSL
    • Reference Các bạn có thể tham khảo thêm ở trang github của nó nhé

Gem hỗ trợ viết API

  • doorkeeper: https://github.com/doorkeeper-gem/doorkeeper Đây là gem giúp các bạn thực hiện authenticate user thông qua token, quản lý token expire time,...cung cấp sẵn các API như:

    • Create new token
    • Refresh token
    • Revoke token Ngoài ra nó còn hỗ trợ phương thức chứng thực Oauth2, việc cấu hình và sử dụng gem này cũng không phức tạp lắm, và document của nó thì khá là dễ hiểu nên bạn nào có ý định xây dựng 1 ứng dụng API thì nên tham khảo nó. Dự án của mình hiện tại cũng có xây dựng API cho phía mobile và mình đang sử dụng combo: doorkeeper + active_model_serializer để viết API thấy rất hiệu quả và nhìn code rất clean. Bạn nào muốn viết API hãy cân nhắc sử dụng combo này xem thử :v Guideline: https://github.com/doorkeeper-gem/doorkeeper#installation
  • grape: https://github.com/ruby-grape/grape Đây cũng là một gem giúp xây dựng một ứng dụng RESTful API được khá là nhiều developer sử dụng (> 5 củ người download @@). Có thể nó còn rất nhiều tính năng hay ho bên trong mà mình chưa biết (vì chưa dùng lần nào) nhưng đọc qua cái docs của nó thì thấy hơi ngán vì cấu trúc file khá lằn nhằng, chắc bữa nào phải ngồi ngâm cứu lại nó xem (lol)

  • jwt: https://github.com/jwt/ruby-jwt Json Web Token là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON. Nó được dùng để sinh ra chuỗi token theo một thuật toán nhất định, chuỗi token này được dùng để authenticate user. Một điều đặc biệt là khác với 2 gem trên token cần được lưu xuống database thì khi sử dụng jwt chúng ta không cần lưu lại token mà việc authenticate token sẽ dựa vào chuỗi SECRET trên server mà chúng ta định nghĩa. Cái này mình chỉ mới đọc qua chứ chưa làm thực sự nên các bạn tìm hiểu thêm nhé. Guideline: https://viblo.asia/p/jwt-authentication-trong-rails-ymwGXV40R4p1

Gem hỗ trợ Serializer

Gem hỗ trợ chèn record hàng loạt (bulk inserting data)

  • activerecord-import: https://github.com/zdennis/activerecord-import Giả sử bạn có 1000 dòng data muốn lưu vào database, theo cách làm thông thường sẽ tạo 1 vòng loop rồi insert từng dòng vào database đúng không. Nếu như thế thì các bạn sẽ mất N query để insert dữ liệu vào database. Với activerecord-import các bạn chỉ cần khởi tạo giá trị cho 1000 record ở trên và import chúng vào database chỉ với 1 câu sql duy nhất :v Gem này hỗ trợ rất tốt trong trường hợp các bạn cần insert số lượng record lớn.

Hôm nay chắc dừng ở đây thôi nhỉ, nếu có thời gian mình sẽ tiếp tục bổ sung thêm các gem support mà mình biết để giúp cho các bạn dễ dàng tiếp cận hơn và có nhiều sự lựa chọn khi thực hiện dự án :v

Bài này được viết dựa trên kinh nghiệm còn ít ỏi của bản thân nên có những chỗ nào thiếu sót và chưa đúng hoặc cần bổ sung thêm nhờ các bạn góp ý giúp mình ạ (lay4)


All Rights Reserved