Android RESTE client, l'Échantillon?
Même si ce fil a accepté de répondre, n'hésitez pas à proposer d'autres idées, vous utilisez ou comme
J'ai rencontré ces articles:
Et qui m'amènent à cette Google I/O 2010 video sur le REPOS des applications client
Depuis maintenant, j'ai été la création de REPOS composant en tant que composante statique dans mon Application de contrôleur de classe.
À partir de maintenant, je pense que je devrais changer le modèle. Quelqu'un a souligné que Google IOSched application est un grand exemple de la façon d'écrire de REPOS clients sur Android. Quelqu'un d'autre dit que cette manière est trop trop compliqué.
Donc, quelqu'un peut-il svp nous indiquer quelle est la meilleure pratique? En bref et simple.
Le IOSched demande est trop complexe pour des exemples de cas d'utilisation.
- Bonjour, en Général je développe des colis pour le service web nommé "ws", j'ai généraliser classe nommée "WebServicUtils.java". WebServiceUtils.java la classe possède des méthodes pour accéder à des services web. Je ne suis pas sûr que ma technique est le meilleur ou pas, mais Il est réutilisable à chaque fois que je copie mon ws paquet dans l'Application Android, Laissez-moi savoir si vous voulez en savoir plus sur ma technique.
- Je ne pense pas que youtube, le commentateur a une meilleure alternative. Nous devons travailler au sein d'Android Api, même si elles sont souvent incroyablement compliqué et détaillé non-sens.
- Comme une note de côté, Mechanoid, un open-source eclipse plugin pour Android peut générer du JSON-REPOS clients à l'aide d'un simple DSL, un guide sur la façon d'utiliser il peut être trouvé ici robotoworks.com/mechanoid-plugin/service-client-dsl (je suis l'auteur de ce plugin, désolé pour le plug sans vergogne!)
- Cela peut être très utile pour les personnes d'apprentissage Android RESTE à être mise en oeuvre. Dobjanschi présentation transcrit dans un document PDF: drive.google.com/file/d/0B2dn_3573C3RdlVpU2JBWXdSb3c/...
Vous devez vous connecter pour publier un commentaire.
EDIT 2 (octobre 2017):
C'est 2017. Juste l'utilisation de Rénovation. Il n'y a presque pas de raison d'utiliser autre chose.
EDIT:
L'original de la réponse est plus d'un an et demi d'existence au moment de cette édition. Bien que les concepts présentés dans la réponse originale à cette question encore de les tenir, comme d'autres réponses point, il y a maintenant bibliothèques que de rendre cette tâche plus facile pour vous. Plus important encore, certains de ces bibliothèques supporter les changements de configuration pour vous.
L'original de la réplique est maintenu en dessous pour référence. Mais s'il vous plaît prendre le temps d'examiner le Reste des bibliothèques clientes pour Android pour voir si elles correspondent à votre cas d'utilisation. Ce qui suit est une liste de certains des bibliothèques, j'ai évalué. Il n'est pas destiné à être une liste exhaustive.
Réponse Originale À Cette Question:
Présenter mon approche de REPOS clients sur Android. Je ne prétendons pas que c'est le meilleur bien 🙂 notez Également que c'est ce que j'ai trouvé de réponse à ma demande. Vous pourriez avoir besoin d'avoir plusieurs calques/ajouter plus de complexité si votre cas l'exige. Par exemple, je n'ai pas de local de stockage à tous; parce que mon application peut tolérer la perte d'un peu de REPOS réponses.
Mon approche utilise juste
AsyncTask
s sous les couvertures. Dans mon cas, j'ai "appel" de ces Tâches à partir de monActivity
instance; mais pleinement compte pour les cas comme la rotation de l'écran, vous pouvez choisir de les appeler à partir d'unService
ou telle.J'ai consciemment choisi mon REPOS client lui-même à une API. Cela signifie, que l'application qui utilise mon REPOS client n'a même pas besoin d'être conscient de la réelle RESTE de l'URL et le format de données utilisé.
Le client aura de 2 couches:
Couche supérieure: Le but de cette couche est de fournir des méthodes qui reflètent la fonctionnalité de l'API REST. Par exemple, vous pourriez avoir une méthode Java correspondant à chaque URL dans votre API REST (ou même les deux en un " pour les Obtient et un pour les Poteaux).
C'est le point d'entrée dans le RESTE de l'API client. C'est la couche de l'application serait de l'utiliser normalement. Il pourrait être un singleton, mais pas nécessairement.
La réponse de l'appel RESTE est analysé par cette couche dans un POJO et est retourné à l'application.
Ce qui est le plus bas niveau
AsyncTask
couche, qui utilise le client HTTP méthodes de sortir et de faire appel RESTE.En outre, j'ai choisi d'utiliser un mécanisme de Rappel à communiquer les résultats de l'
AsyncTask
de revenir à l'application.Assez de texte. Nous allons voir le code maintenant. Permet de prendre un hypothétique RESTE URL API - http://myhypotheticalapi.com/user/profile
La couche supérieure pourrait ressembler à ceci:
Noter que l'application ne permet pas d'utiliser le JSON ou XML (ou tout autre format) retourné par l'API REST directement. Au lieu de cela, l'application ne voit que le haricot
Profile
.Ensuite, la couche inférieure (AsyncTask couche) pourrait ressembler à ceci:
Voici comment une application peut utiliser l'API (dans un
Activity
ouService
):J'espère que les commentaires sont suffisantes pour expliquer la conception de; mais je serais heureux de vous fournir plus d'informations.
GetResponseCallback
plus générique. Celui que je préfère est d'utiliser un interface marqueur : Commeinterface IGetResopnse{}
à désigner toutes les classes qui pourraient être des réponses. Ensuite, j'aiclass Profile implements IGetResponse
etc. Enfin, faireGetResponseCallback
générique avecIGetResponse
comme la limite supérieure :public abstract class GetResponseCallback<? extends IGetResponse>
.public abstract class GetResponseCallback<T extends IGetResponse>
. Le paramètre doit êtreT extends ...
et pas? extends ...
"Le développement d'Android RESTE des applications client" par Virgil Dobjanschi conduit à beaucoup de discussions, car aucun code source n'a été présenté pendant la session ou après.
La seule référence de mise en œuvre de ce que je sais (merci de commenter si vous en savez plus) est disponible à Datadroid (la Google IO session est mentionné sous /présentation). C'est une bibliothèque qui vous pouvez utiliser dans votre propre application.
Le second lien demande pour le "meilleur" RESTE du cadre, ce qui est discuté lourdement sur stackoverflow. Pour moi, la taille de l'application est importante, suivie par la performance de la mise en œuvre.
Donc je m'en tiens à org.json ou GSON pour complexer les scénarios. Pour l'architecture d'un org.json mise en œuvre, je suis en utilisant une classe statique qui représente le serveur cas d'utilisation (par exemple, findPerson, getPerson). J'appelle cette fonctionnalité à partir d'un service et d'utilisation de l'utilitaire de classes qui sont en train de faire la cartographie (projet spécifique) et le réseau IO (ma propre RESTE modèle ordinaire GET ou POST). J'essaie d'éviter l'usage de la réflexion.
Ne jamais utiliser AsynTask pour effectuer la demande de réseau ou n'importe quoi qui doivent être conservés. Async Task sont fortement liés à votre activité et si l'utilisateur de changer l'orientation de l'écran étant donné que l'App est de nouveau créé l'AsyncTask sera arrêté.
Je vous suggérons d'utiliser le Service de motif avec l'Intention de Services et ResultReceiver. Jetez un oeil à RESTDroid. C'est une bibliothèque qui vous permet d'effectuer tout type de REPOS demande de manière asynchrone et informez-en votre INTERFACE utilisateur avec Demande Auditeurs de la mise en œuvre de l'Virgile Dobjanschi de service du modèle.
Il y a une autre bibliothèque avec beaucoup plus propre API et de type sécurisé de données.
https://github.com/kodart/Httpzoid
Voici un simple exemple d'utilisation
Ou plus complexes, avec des rappels
C'est nouveau, mais semble très prometteur.
Il y a beaucoup de bibliothèques et j'utilise celui-ci: https://github.com/nerde/rest-resource. Il a été créé par moi, et, comme vous pouvez le voir dans la documentation, c'est beaucoup plus propre et plus simple que les autres. Il n'est pas porté sur Android, mais je suis en utilisant en elle, et ça fonctionne assez bien.
Il prend en charge HTTP Basic Auth. Il fait le sale boulot de la sérialisation et la désérialisation des objets JSON. Vous l'aimez, spécialement si votre API Rails comme.
Avertissement: je suis impliqué dans le rest2mobile projet open source
Une autre alternative que d'un client REST est d'utiliser rest2mobile.
L'approche est légèrement différente, car elle utilise des reste des exemples pour générer le code du client pour le service REST. Le code remplace l'URL REST et JSON charges avec java natif des méthodes et des objets Pojo. Elle aussi s'occupe automatiquement des connexions au serveur asynchrone des invocations et des POJO vers/à partir de JSON conversions.
Noter que cet outil vient en différentes saveurs (cli, plugins, android/ios/js) et vous pouvez utiliser le android studio plugin pour générer de l'API directement dans votre application.
Tout le code peut être trouvé sur github ici.