2

我有一个关于最佳实践的问题:在应用程序中处理 GET 和 POST 请求的最佳方式是什么?应该使用两种单独的控制器方法(一种用于 POST,一种用于 GET)来完成,还是应该在一个中一起处理。他们对这两种选择有什么优点/缺点吗?两者都是可行的和工作的,我只是想听听社区的意见。我正在使用 play 框架,但这确实适用于任何 MVC 框架。下面我创建了第二个选项的简单示例,仅供参考。

在路由文件中定义了两个路由(确保 POST 高于 GET 以便优先)都指向同一个方法:

POST  /index           controllers.Application.index()
GET   /index           controllers.Application.index()

在应用程序控制器中,我们有一种方法:

public static Result index() {
    if (request().method().equals("POST")) {
       // bind, validate, return badRequest if hasErrors else capture and redirect
    }        
    return Results.ok(index.render("Home", Application.testForm));
}

你的意见?

4

2 回答 2

3

我倾向于使用Rails 风格的路由,这使得路由文件看起来像

GET    /foos          controllers.FooController.index()
GET    /foos/new      controllers.FooController.new_form()
POST   /foos          controllers.FooController.create()
GET    /foos/:id      controllers.FooController.show(id:Long)
GET    /foos/:id/edit controllers.FooController.edit_form()
PUT    /foos/:id      controllers.FooController.update(id:Long)
DELETE /foos/:id      controllers.FooController.delete(id:Long)

这将处理 Foo 对象的大部分代码保留在同一个位置,并且任何实用程序方法都在附近。您可能可以制作一个更智能的 Play 路由器来自动设置这些路由,就像 Rails 的资源一样。

于 2013-08-13T19:53:38.100 回答
2

通常GETPOST做很多其他事情,因此如果您使用典型的 REST 方法来做这件事,对您来说会更舒服

GET     /objects/:id       controllers.Application.objFindSingle(id: Int)
GET     /objects           controllers.Application.objFindAll
PUT     /objects/:id       controllers.Application.objUpdate(id: Int)
POST    /objects           controllers.Application.objCreate
DELETE  /objects/:id       controllers.Application.objDelete(id: Int)
于 2013-08-13T19:57:20.470 回答