Lifecycle của một request trong rails

 Dec-01-2020 11:26 AM
#CNTT #news

Sơ lược về bộ định tuyến (router)

Hầu hết các nhà phát triển Rails đều đã khá quen thuộc với quy trình: mở thư mục controllers , viết một số code Ruby bên trong một action, truy cập URL đó từ trình duyệt và thử code bạn vừa viết. Nhưng bạn đã nghĩ về cách mà một request hoạt động chưa? Làm thế nào mà việc nhập một URL vào thanh địa chỉ của trình duyệt lại biến thành một lệnh gọi phương thức trên bộ điều khiển của bạn? Điều gì đã thực sự gọi đến các method của bạn?

Giả sử bạn muốn gặp bạn của bạn để cùng đi ăn trưa. "Meet at ... ?" là câu hỏi đơn giản dễ hiểu đối với người bạn thân của ta, vì họ và ta đã quen với những địa điểm đó, nhưng điều đó có thể không hữu ích lắm đối với người bạn ngoại tỉnh của bạn. Thay vào đó, bạn có thể cung cấp địa chỉ chính xác của nhà hàng đó, bằng cách đó, họ có thể đưa địa chỉ đó cho tài xế taxi hoặc chỉ cần hỏi người dân địa phương.

Máy tính cũng hoạt động như vậy. Khi bạn nhập một tên miền như vậy vào trình duyệt của mình, yêu cầu đầu tiên là trình duyệt phải kết nối với máy chủ bạn yêu cầu. Thật ra địa chỉ hosting là một dãy các số được gọi là địa chỉ IP, nhưng để có thể dễ dàng nhớ và sử dụng hơn người ta đã tạo ra khái niệm các tên miền, đó chính là thay thế dãy số đó thành một dải địa chỉ tên như "viblo.asiasun-asterisk.vn,...". Để làm được điều đó mỗi khi bạn nhập tên miền đó lên sẽ cần biên dịch tên đó thành địa chỉ cho các mạng máy tính là dạng địa chỉ IP ban đầu. (

Nó trông giống như 34.194.84.73, có thể bạn đã bắt gặp nó ở đâu đó. Với loại địa chỉ này, các máy tính có thể điều hướng các mạng được kết nối với nhau của Internet và tìm đường đến đích của chúng.

DNS, viết tắt của Domain Name System, là thứ giúp máy tính của chúng ta dịch tên miền thành địa chỉ IP mà chúng sử dụng để tìm đúng máy chủ. Bạn có thể thử với một tiện ích được gọi là dig trên máy tính của bạn (hoặc với phiên bản trực tuyến này ).

Life Cycle của một request là gì ?

Thuật ngữ life cycle of request chính là chỉ một vòng đời của một request khi người dùng gửi yêu cầu đến máy chủ. Hầu hết các framework bây giờ đều sử dụng mô hình MVC để làm tiêu chuẩn , vậy điều đó đồng nghĩa với việc tất cả các framework sẽ đều có cycle life giống nhau ư? Có lẽ cũng có thể xem là như vậy , vì nếu nhìn một cách tổng quát chúng ta sẽ thấy được một vòng đời của request sẽ đều cần đến: Model - View - Controller

Cycle life trong Rails

Ở bài viết này chúng ta sẽ cùng tìm hiểu về một chu trình vòng đời của một request trong rails framework nhé !

Rails sử dụng kiến trúc Model-View-Controller (MVC) làm quy ước cấu trúc của nó và luồng dữ liệu của chu trình Yêu cầu-Phản hồi điều hướng qua khung này thông qua các tuyến được xác định trước. Nơi tốt nhất để chúng ta bắt đầu là cùng một nơi mà lần đầu tiên yêu cầu tương tác với máy chủ và được chỉ định một tuyến đường để theo dõi qua Ruby-land - bộ định tuyến. Bộ định tuyến được cung cấp một đối tượng dạng băm có chứa động từ HTTP (GET, POST, PATCH, DELETE) và đường dẫn URL và hướng nó đến một hành động cụ thể trong một bộ điều khiển cụ thể.

Bằng cách này, bộ định tuyến (router) hoạt động với cơ chế giống như bộ chuyển đổi. Mỗi khi truy cập đến route đã set trước , chúng ta sẽ thực thi được một action trong một controller tương ứng với những gì chúng ta đã viết ở file route.rb.

Hãy cùng tiếp tục nhìn hình dưới đây :

Đầu tiên, máy chủ sẽ xác định xem để vào được địa chỉ đó request có phải vượt qua middleware nào hay không ? ( ở bài viết này chúng ta sẽ giả sử rằng chúng ta đã hiểu được khái niệm middleware là gì ) Nếu cần thì máy chủ sẽ xem request của người dùng đó có đủ điều kiện để có thể tiếp tục hay không , nếu không vượt qua được middleware thì máy chủ sẽ điều hướng chúng ta đến một địa chỉ , một hành động khác mà người phát triển đã thiết lập trước.

Sau khi vượt qua được middleware thì máy chủ sẽ điều hướng ta theo controller và action được thiết lập cho đường dẫn đó.

    get "/login", to: "sessions#new"

Ở ví dụ trên ta có thể thấy rằng khi người dùng truy cập vào một địa chỉ ví dụ domain.example/login thì bộ điều khiển sẽ đưa ta đến thực thi action "new" nằm trong controller "sessions" Sau đó , controller sẽ xác định xem request đó có cần truy vấn dữ liệu gì từ database hay không, nếu cần thì data sẽ được trả về từ Model (Model biểu trưng cho database vì phải nó làm việc trực tiếp với database và đó là phần việc xử lý chuyên biệt dành cho model ) và được đưa về controller . Sau cùng sẽ là xác định View được dùng để trả về cho request đó , điều đó không bắt buộc đối với mỗi request , vì có thể request chỉ dùng để create, update một bản ghi hay cũng có thể request chỉ dùng để trả về API dạng json cho platform khác. Cuối cùng một lần nữa , request sẽ lại đi qua middleware để kiểm soát dữ liệu theo yêu cầu từ developer rồi mới trả về dữ liệu hoặc render view (nếu có) cho client.

Như vậy , qua bài viết này chúng ta đã có cái nhìn tổng quan về mô hình MVC và điều đó đã nói lên được khái niệm về cyclelife request trong rails. Tuy nhiên để hiểu sâu hơn và chi tiết hơn , chúng ta sẽ cùng hẹn nhau ở bài viết lần sau tại viblo.asia các bạn nhé !

Link bài viết tham khảo : https://blog.skylight.io/the-lifecycle-of-a-request/

Trần Thái Dương

Hỗ trợ trực tuyến
Online Offline
Hỗ trợ trực tuyến