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/…

  • Devise: https://github.com/plataformatec/devise
    Nếu bạn muốn có một chức năng chức thực người dùng với các thao tác:

    • sign_in/sign_up/logout,
    • quản lý danh sách người dùng,
    • các thao tác CRUD cơ bản

    Thì Devise là một gem tuyệt vời giúp bạn thực hiện trên chỉ trong nháy mắt mà thôi =]].
    Sự hiệu quả của nó được thể hiện qua hơn 28 triệu lượt download của các developer Ruby on Rails trên trang https://rubygems.org/
    Đa số các dự án hiện tại ở công ty mình đều thấy đang sử dụng Gem này để thực hiện authentication phía màn hình quản lý :v
    Guideline: https://viblo.asia/p/gioi-thieu-gem-devise-amoG84YnGz8P

  • Clearance: https://github.com/thoughtbot/clearance
    Thằng này cũng có chức năng tương tự,
    các bạn tham khảo thêm ở trang source của nó nhé.
    Guideline: https://viblo.asia/p/rails-authentication-voi-gem-clearance-p1PvQ5EBvldr

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.

  • Cancancan: https://github.com/CanCanCommunity/cancancan
    Đây là gem được khá nhiều người sử dụng để thực hiện phân quyền trong ứng dụng của mình.
    Guideline: trang github của nó đã mô tả rất đầy đủ quá trình cài đặt và sử dụng, các bạn tham khảo nhé.
  • role_authorization: https://github.com/asceth/role_authorization

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

  • active_model_serializer: https://github.com/rails-api/active_model_serializers
    Đúng như cái tên của nó gem này tạo nên các convention chung trong việc generate chuỗi JSON.
    Làm việc thông qua 2 components chính: serializers và adapters
    Serializers mô tả những attributes và relationships sẽ được serialized
    Adapters mô tả cách mà các attributes và relationships sẽ được serialized.
    Guideline: https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/getting_started.md

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)

Bài viết liên quan

Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 9) Hướng dẫn xây dựng ứng dụng API đơn giản với gem doorkeeper

Chào các bạn, Giới thiệu Hôm nay mình sẽ tiếp tục Series Hướng Dẫn Lập...

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(2)

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...

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

Chào các bạn, Dạo này công việc hơi bận rộn nên Series Hướng Dẫn Lập...

Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 7) – Deploy App On Heroku

Xin chào các bạn, Hôm nay mình sẽ tiếp tục hướng dẫn các bạn Series...

Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 6)

Chào các bạn, hôm nay mình sẽ tiếp tục phần 6 của Series Hướng dẫn...

Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 5)

Chào các bạn, hôm nay mình sẽ tiếp tục phần 5 của Series Hướng dẫn...

Trả lời