Zgodnie z żądaniem proste podejście podobne do REST. Działa prawie tak samo, jak rozwiązanie Codemwncis, ale używa nagłówka Accept do negocjacji zawartości. Najpierw plik tras:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Nie określasz tutaj żadnego typu treści. Takie postępowanie jest konieczne tylko wtedy, gdy chcesz mieć „specjalne” identyfikatory URI dla określonych zasobów. Podobnie jak deklarowanie trasy do, /users/feed/
aby zawsze powracała w Atom / RSS.
Kontroler aplikacji wygląda następująco:
public static void createUser(User newUser) {
newUser.save();
user(newUser.id);
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
user(id);
}
public static void deleteUser(Long id) {
User.findById(id).delete();
renderText("success");
}
public static void user(Long id) {
User user = User.findById(id)
render(user);
}
Jak widać, usunąłem tylko metodę getUserJSON i zmieniłem nazwę metody getUser. Aby różne typy treści działały, musisz teraz utworzyć kilka szablonów. Po jednym dla każdego typu treści. Na przykład:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Takie podejście zapewnia przeglądarkom zawsze widok HTML, ponieważ wszystkie przeglądarki wysyłają tekst / html typu treści w nagłówku Accept. Wszyscy inni klienci (prawdopodobnie niektóre żądania AJAX oparte na JavaScript) mogą definiować własne pożądane typy zawartości. Używając metody jQuerys ajax (), możesz wykonać następujące czynności:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Który powinien dostarczyć Ci szczegółowych informacji o użytkowniku o identyfikatorze 1 w formacie JSON. Play obsługuje obecnie natywnie HTML, JSON i XML, ale możesz łatwo użyć innego typu, postępując zgodnie z oficjalną dokumentacją lub korzystając z modułu negocjacji treści .
Jeśli używasz Eclipse do programowania, sugeruję użycie wtyczki klienta REST, która pozwala przetestować trasy i odpowiadający im typ zawartości.
To wciąż popularne pytanie, ale najwyżej ocenione odpowiedzi nie są aktualne w aktualnej wersji gry. Oto działający przykład REST z grą 2.2.1:
conf / Routes:
app / controllers / UserController.java:
źródło
Użyj Play! zrobić to wszystko. Pisanie usług REST w Play jest bardzo łatwe.
Po pierwsze, plik tras ułatwia pisanie tras zgodnych z podejściem REST.
Następnie piszesz swoje akcje w kontrolerze dla każdej metody API, którą chcesz utworzyć.
W zależności od tego, jak chcesz zwrócić wynik (XML, JSON itp.), Istnieje kilka metod, których możesz użyć. Na przykład użycie metody renderJSON umożliwia bardzo łatwe renderowanie wyników. Jeśli chcesz renderować XML, możesz to zrobić w taki sam sposób, jak budowałbyś dokument HTML w swoim Widoku.
Oto zgrabny przykład.
plik tras
Plik aplikacji
plik getUser.xml
źródło
Integracja z implementacją JAX-RS jest możliwym alternatywnym podejściem do korzystania z wbudowanego routingu HTTP Play. Aby zapoznać się z przykładem RESTEasy, zobacz RESTEasy Play! moduł .
Takie podejście ma sens, jeśli już zainwestowałeś w JAX-RS lub jeśli potrzebujesz niektórych zaawansowanych funkcji REST, które zapewnia JAX-RS, takich jak negocjowanie treści. Jeśli nie, byłoby łatwiej po prostu użyć Play bezpośrednio do obsługi formatu JSON lub XML w odpowiedzi na żądania HTTP.
źródło
powinieneś rzucić okiem
http://www.lunatech-labs.com/open-source/resteasy-crud-play-module
jest to moduł do gry, który automatycznie tworzy interfejs odpoczynku, tak jak moduł crud automatycznie buduje obszar administracyjny ...
źródło
Wygląda na to, że to podejście jest zepsute w Play w wersji 1.2.3. Jeśli pobierzesz źródło wykonane przez @seb i wspomniane wcześniej https://github.com/sebhoss/play-user-sample , utworzenie nowego obiektu użytkownika za pomocą POST z obiektem JSON nie jest już możliwe.
Musisz mieć określone metody tworzenia wykonane przy użyciu POST json i xml. Przedstawiono tutaj: https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU
źródło