Игровая платформа 2

У меня есть вопрос о передовом опыте: как лучше всего обрабатывать запросы GET и POST в приложении? Следует ли это делать с использованием двух отдельных методов контроллера (один для POST и один для GET) или обрабатывать вместе в одном. Есть ли у них какие-либо преимущества/недостатки для любого варианта? И то, и другое возможно и работает, я просто хотел бы услышать мнение сообщества. Я использую игровой фреймворк, однако на самом деле это может относиться к любому фреймворку 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));
}

Твои мысли?


person Hegemon    schedule 13.08.2013    source источник


Ответы (2)


Обычно я использую маршрутизацию в стиле 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.

person joev    schedule 13.08.2013
comment
Хе-хе, ты был первым +1 ;) - person biesior; 13.08.2013
comment
Спасибо, ваши комментарии (а также biesior) изменили мой взгляд на контроллеры! оценил! - person Hegemon; 14.08.2013

Обычно 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)
person biesior    schedule 13.08.2013