我有一个关于最佳实践的问题:在应用程序中处理GET和POST请求的最佳方法是什么?是否应该使用两个单独的控制器方法(一个用于POST,一个用于GET)或一起处理。他们对任何一种选择都有任何优点/缺点吗?两者都是可行和有效的,我只想听听社区的意见。我正在使用play框架,但这可以适用于任何MVC框架。下面我创建了第二个选项的简单示例,仅供参考。
在路由文件中,定义了两个路由(确保POST高于GET,因此它优先),两者都指向同一个方法:
POST /index controllers.Application.index()
GET /index controllers.Application.index()
在Application控制器中,我们有一个方法:
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));
}
你的想法?
答案 0 :(得分:3)
我倾向于使用Rails-style routing,这使路线文件看起来像
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的资源。
答案 1 :(得分:2)
通常GET
和POST
做其他事情,因此如果您使用典型的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)