HTTP routing Sacala
The built-in HTTP router
Router là thành phần phụ trách xử lý yêu cầu từ HTTP tới các Action.
Gồm 2 thành phần chính :
– Gồm các chuỗi truy vấn như (/clients/1542, /photos/list)
– Gồm các phương thức GET, POST…
Router được định nghĩa trong file conf/routes
The routes file syntax
File conf/routes
định nghĩa các phương thức truy vấn cho toàn bộ dự án, mỗi một router bao gồm phương thức HTTP và URI pattern (URI pattern sẽ được nói ở phía dưới), cả hai kết hợp với Action trong controller
Ví dụ:
GET /clients/:id controllers.Clients.show(id: Long)
Mỗi router bắt đầu là phương thức HTTP(GET) tiếp theo là URI(/clients/:id) sau đó là định nghĩa tham số.
The HTTP method
Các phương thức HTTP được hỗ trợ các kiểu sau (GET, POST, PUT, DELETE, HEAD).
The URI pattern
Static path
Ví dụ định nghĩa router sau sẽ lấy list thông khách hàng.
GET /clients/all controllers.Clients.list()
Dynamic parts
Ví dụ định nghĩa router sau sẽ lấy ID thông tin khách hàng.
GET /clients/:id controllers.Clients.show(id: Long)
Call to the Action generator method
Router không có parameters chỉ cung cấp tên phương thức:
GET / controllers.Application.homePage()
Có paramaters trong đường dẫn URI hoặc từ câu truy vấn
GET /:page controllers.Application.show(page)
hoặc
GET / controllers.Application.show(page)
Với router ở trên là định nghĩa method trong controller tương ứng sau:
def show(page: String) = Action { loadContentFromDatabase(page).map { htmlContent => Ok(htmlContent).as("text/html") }.getOrElse(NotFound) }
Parameter types
Đối với các thông số của kiểu String, tham số là tùy chọn. Nếu bạn muốn Play chuyển đổi các tham số đầu vào thành một kiểu của Scala bạn có thể gõ một cách rõ ràng các thông số:
GET /clients/:id controllers.Clients.show(id: Long)
Trong controller tương ứng với router trên như sau:
def show(id: Long) = Action { Client.findById(id).map { client => Ok(views.html.Clients.display(client)) }.getOrElse(NotFound) }
Parameters with fixed values
Ngoài ra chúng ta có thể thiệt định một giá trị default cho parameter như sau:
GET / controllers.Application.show(page = "home") GET /:page controllers.Application.show(page)
Parameters with default values
Ví dụ với đường dẫn như sau:
/clients?page=3
Router được thiết định như sau:
GET /clients controllers.Clients.list(page: Int ?= 1)
Optional parameters
Bạn cũng có thể chỉ định một tham số tùy chọn mà không cần phải có trong các request trả về
Ví dụ với đường dẫn như sau:
/api/list-all?version=3.0
Router được thiết định như sau:
GET /api/list-all controllers.Api.list(version: Option[String])
Reverse routing
Bạn tạo ra một bộ điều khiển như sau:
package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def hello(name: String) = Action { Ok("Hello " + name + "!") } }
Trong file conf/routes
bạn định nghĩa như sau:
GET /hello/:name controllers.Application.hello(name)
Bây giờ bạn có thể reverse URL với action hello method sử dụng controllers.routes.Application
như sau:
def helloBob = Action { Redirect(routes.Application.hello("Bob")) }