Quaá trình xử lý khi nhận 1 request
Show Đã đăng vào thg 7 24, 2017 7:43 SA 2 phút đọc Bạn có bao giờ tự hỏi điều: what happen when you create a request to server? Dạo gần đây mình có đọc một bài viết khá hay về vấn đề này và muốn trình bày lại cho mọi người.
sites-enabled/cfn.framgia.vn
App server sẽ có trách nhiệm chạy đến rails application load code của application và giữ nó trong memory. Và khi App Server tiếp nhận request từ web server và bắt đầu xử lí ( bạn có thể chạy một app server mà không cần đến web server).
và phần còn lại thì các bạn đã biết rồi đấy vì đó là công việc hàng ngày của web developer chúng ta mà All rights reserved Ok mình đã trở lại đây, dạo này hơi bận bịu tí nên ra bài hơi lâu, mong các bạn thông cảm 1. Controller là gì, hoạt động ra sao?1.1. Controller là gì?Như đã nói ở các bài trước, Controller trong ứng dụng Spring Boot là nơi tiếp nhận request và trả về response cho client. Có thể hiểu controller chính là lớp trung gian giữa server của bạn và bên ngoài. Về mặt code, Controller chỉ đơn thuần là một bean được đánh dấu với Trong Spring Boot, có hai dạng Controller, tương ứng hai annotation trên:
Do đó, ta có thể nói 1.2. Code ví dụBên dưới là cấu trúc một controller nhé.
1.3. Các hoạt động của controllerNhư hình trên, khi client gửi một request tới server Spring Boot của mình, thì nó sẽ đi qua thứ gọi là Front controller trước. Đây là controller có sẵn, nó có tác dụng sau:
Với chiều ngược lại cũng tương tự như vậy. Dữ liệu trả về từ controller sẽ được build thành response và trả cho client. 2. Controller mapping2.1. Các loại HTTP requestBạn nào học về web hẳn đã rõ về khái niệm HTTP request. Mình sẽ không nói sâu về phần này, nhưng tạm hiểu mỗi HTTP request sẽ gồm 2 thông tin quan trọng:
Trong controller, chỉ cần nắm được hai thông tin trên thì sẽ bắt được mọi request được gửi tới, sau đó mới xử lý tiếp. Trong Rest API design, thì người ta thường dùng danh từ trong URL để chỉ đối tượng được tác động. Còn các HTTP method để đại diện cho hành động nào sẽ áp dụng lên đối tượng đó. Ví dụ như:
Thường thì theo khuyến nghị người ta sử dụng đúng HTTP method với các hành động CRUD tương ứng:
Hầu hết các ứng dụng web đều sử dụng 4 hành động
CRUD cơ bản trên tới hơn 2/3 rồi. Ngoài ra có thể có các hành động khác mà không có method tương ứng, như login thì có thể thêm vào endpoint như 2.2. Bắt các requestSpring Boot dùng các annotation sau, đánh dấu lên từng method của controller, để chỉ định rằng khi HTTP method tương ứng gọi tới thì method sẽ được thực thi.
Ví dụ trên có 2 method, bắt tương
ứng hai request là Các annotation phổ biến như
Ngoài ra,
3. Nhận request data trong ControllerController nhận dữ liệu từ request, tùy vào dữ liệu nằm ở đâu mà chúng ta có cách lấy ra khác nhau:
3.1. Request param (query string)Ví dụ như request sau
Trong trường hợp
Lúc này, do biến Ngoài ra 3.2 Path variablePath variable là một phần trong đường dẫn URL, ví dụ
3.3. Request bodyRequest method PUT, POST mới có request body, đây là nơi chứa data chính để gửi lên. Thường thì request body sẽ ở dạng JSON hoặc form-data, khi vào controller sẽ được tự động parse ra thành Object (ví dụ DTO chẳng hạn).
Đây là ví dụ về class
3.4. Header
Ví dụ như trên mình muốn thực hiện xác thực người dùng bằng Basic authentication. Thông tin username, password được encode trong header có tên là Authorization. Muốn lấy được value trong header, thì các bạn sử dụng Okay bài viết tới đây là hết rồi. Bài tiếp theo mình sẽ nói tiếp về cách return dữ liệu về cho client nhé. Nhớ đón xem và đừng quên ủng hộ mình bằng cách vote và clip thật nhiều nhé. Thân |