Играет! Framework 2.0 подходит для создания REST API?

Я разработал REST API, используя Play! Framework 1.2.4, и у меня есть сильная симпатия к структуре. Простота и быстрый цикл разработки помогли мне достичь этого за долю времени, которое я бы взял, если бы я пошел традиционным маршрутом Java EE.

Теперь, когда я изучаю использование Play! 2.0.3 для моего следующего проекта. Я вижу, что, хотя структура была улучшена и упрощает разработку веб-приложений, нельзя сказать о API REST. У моего приложения не будет никакого HTML-кода - я просто отвечу XML или JSON или любым другим форматом обмена данными, который я решил использовать в будущем.

Итак, вопрос:

Кто-нибудь здесь использовал Play 2.0.x для публикации не-html чистых REST API?

Подробнее:

Вот некоторые из факторов, которые, по моему мнению, усложняют разработку чистого REST API в Play 2.0.x по сравнению с 1.2.x. Пожалуйста, исправьте мое понимание, если я ошибаюсь.

Консолидация содержимого сложнее

В игре! 1.2.4, согласование содержания содержалось в структуре. Были варианты для определения в файле маршрутов, какой тип контента запрашивается запросом.

GET /friends User.listFriends(format:'xml')

Затем в контроллере

public static void getFriends(){
    render();
}

Это приведет к автоматическому рендерингу шаблона views/xml/User/listFriends.xml. Чтобы добавить поддержку JSON завтра, все, что мне нужно было сделать, это добавить шаблон views/json/User/listFriends.json.

Я не вижу, как это можно сделать в игре! 2.0.x

Создание не-html-шаблонов менее интуитивно понятное

После некоторых проб и ошибок я понял, что можно создать, например, listFriends.scala.xml в папке views в игре! 2,0. Затем его необходимо вызвать в коде контроллера следующим образом:

return ok(views.xml.listFriends.render());

Однако Eclipse это не нравится, потому что Eclipse не знает о views.xml.listFriends, поскольку он генерируется только после завершения компиляции воспроизведения. Есть ли что-то, что мне не хватает здесь?

Ответ 1

В Play (Scala) вы можете сделать что-то вроде этого:

val myXMl = obtainXML();
return Ok(myXML).as("text/xml")

Я не уверен в синтаксисе в Java, но это было бы эквивалентно: вместо создания шаблона вы генерируете XML, а затем отправляете его пользователю, устанавливая тип возвращаемого значения на "text/xml" ( или json или все, что вам нужно, чтобы это было).

Ответ 2

Как объяснил Pere Villega, но с синтаксисом Java:

String xml = getXMLAsString();
return ok(xml).as("text/xml");

as() метод является частью Класс состояния.

Или альтернатива:

String xml = getXMLAsString();
response().setContentType("text/xml")
return ok(xml);