117 votes

Reposant sur le jeu ! cadre

Nous prévoyez un projet principalement servir du contenu pour des applications mobiles, mais ont besoin d’avoir un site Web.

Ma question est de savoir si est logique d’utiliser le Jersey ou Restlet développer REST API pour nos applications mobiles, et ensuite utiliser Play ! pour desservir le site Web.

Ou est-il préférable d’utiliser seulement le jeu ! pour tout faire ? Dans l’affirmative, comment reposer avec Play ! cadre ?

112voto

seb Points 1177

Selon la demande, un REPOS simple comme approche. Il fonctionne presque de la même manière Codemwncis solution fonctionne, mais utilise l'en-tête Accept pour la négociation de contenu. D'abord le fichier de routes:

GET     /user/{id}            Application.user
POST    /user/                Application.createUser
PUT     /user/{id}            Application.updateUser
DELETE  /user/{id}            Application.deleteUser

Vous ne spécifiez pas de tout type de contenu ici. Le faire est à mon humble avis uniquement nécessaire si vous voulez avoir un "spécial" Uri pour certaines ressources. Comme la déclaration de l'itinéraire pour /users/feed/ toujours y revenir dans Atom/RSS.

Le contrôleur de l'Application ressemble à ceci:

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);
}

Comme vous pouvez le voir j'ai seulement enlevé la getUserJSON méthode et renommé la méthode getUser. Pour les différents types de contenu pour le travail, vous avez maintenant de créer plusieurs modèles. Un pour chaque type de contenu. Par exemple:

user.xml:

<users>
  <user>
    <name>${user.name}</name>
    . . .
  </user>
</users>

de l'utilisateur.json:

{
  "name": "${user.name}",
  "id": "${user.id}",
  . . . 
}

user.html:

<html>...</html>

Cette approche donne des navigateurs toujours de la vue HTML, depuis tous les navigateurs web envoyer un texte/html type de contenu dans leur en-tête Accept. Tous les autres clients (éventuellement un peu de JavaScript basé sur les requêtes AJAX) peuvent définir leur propre type de contenu souhaité. À l'aide de jQuerys ajax() la méthode que vous pouvez faire ce qui suit:

$.ajax({
  url: @{Application.user(1)},
  dataType: json,
  success: function(data) {
    . . . 
  }
});

Qui devrait obtenir les informations relatives à l'Utilisateur avec l'ID 1 au format JSON. Jeu actuellement en charge HTML, JSON et XML natif, mais vous pouvez facilement utiliser un autre type, soit par suite de la documentation officielle ou de l'utilisation de la négociation sur le contenu du module.

Si vous utilisez Eclipse pour le développement, je suggère d'utiliser le client REST plugin qui vous permet de tester vos itinéraires et de leur type de contenu correspondant.

68voto

Alden Points 1993

C’est toujours une question populaire, mais les réponses ont voté plus hauts ne sont pas à jour avec la version actuelle du jeu. Voici un exemple de travail reste avec jeu 2.2.1 :

conf/itinéraires :

app/controllers/UserController.java :

26voto

Codemwnci Points 28817

Utiliser Le Jeu! pour faire tout ça. L'écriture RESTE des services dans le Jeu est très très facile.

Tout d'abord, le fichier de routes rend simple pour écrire des routes qui sont conformes au RESTE de l'approche.

Ensuite, vous écrivez vos actions, dans le contrôleur, pour chaque méthode de l'API que vous souhaitez créer.

Selon la façon dont vous voulez retourner le résultat (XML, JSON, etc), il ya quelques méthodes que vous pouvez utiliser. Par exemple, à l'aide de la renderJSON méthode, permet que les résultats soient rendus très facilement. Si vous voulez rendre XML, alors vous pouvez simplement le faire de la même manière que vous le feriez construire un document HTML dans votre point de Vue.

Ici est un exemple clair.

fichier de routes

GET     /user/{id}            Application.getUser(format:'xml')
GET     /user/{id}/json       Application.getUserJSON
POST    /user/                Application.createUser
PUT     /user/{id}            Application.updateUser
DELETE  /user/{id}            Application.deleteUser

Dossier de demande de

public static void createUser(User newUser) {
    newUser.save();
    renderText("success");
}

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();
    renderText("success");
}

public static void deleteUser(Long id) {
    // first check authority
    User.findById(id).delete();
    renderText("success");
}

public static void getUser(Long id)  {
    User user = User.findById(id)
    renderJSON(user);
}

public static void getUserJSON(Long id) {
    User user = User.findById(id)
    renderJSON(user);
}

getUser.xml fichier

<user>
   <name>${user.name}</name>
   <dob>${user.dob}</dob>
   .... etc etc
</user>

5voto

Peter Hilton Points 10580

L'intégration avec un JAX-RS de la mise en œuvre est une approche alternative possible à l'utilisation de Jouer HTTP intégré dans le routage. Pour un RESTEasy exemple, voir la RESTEasy Jouer! le module.

Cette approche a de sens que si vous êtes déjà investi dans de JAX-RS, ou si vous avez besoin de certaines des fonctionnalités avancées de REPOS que JAX-RS fournit comme la négociation de contenu. Si non, il serait plus simple de l'utiliser juste Jouer directement au service JSON ou XML en réponse à des requêtes HTTP.

4voto

opensas Points 13527

vous devriez jeter un oeil à

http://www.lunatech-Labs.com/Open-source/resteasy-CRUD-Play-module

C’est un module pour le jeu que générer automatiquement une interface rest, tout comme le module crud crée automatiquement une zone admin...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X