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"))
}

Add a Comment