Même si ce fil a accepté la réponse, n'hésitez pas à proposer d'autres idées, vous utilisez ou aimez
J'ai rencontré ces articles:
Et cela m'amène à cette vidéo Google I / O 2010 sur les applications clientes REST
Depuis, je crée un composant REST en tant que composant statique dans ma classe de contrôleur d'application.
À partir de maintenant, je pense que je devrais changer le modèle. Quelqu'un a souligné que l' application Google IOSched est un excellent exemple de la façon d'écrire des clients REST sur Android. Quelqu'un d'autre a dit que cette méthode était trop compliquée.
Alors, quelqu'un peut-il nous montrer quelle est la meilleure pratique? En bref et simple.
L'application IOSched est trop complexe pour un exemple de cas d'utilisation.
Réponses:
EDIT 2 (octobre 2017):
Nous sommes en 2017. Il suffit d'utiliser Retrofit. Il n'y a presque aucune raison d'utiliser autre chose.
ÉDITER:
La réponse originale a plus d'un an et demi au moment de cette modification. Bien que les concepts présentés dans la réponse originale soient toujours valables, comme le soulignent d'autres réponses, il existe désormais des bibliothèques qui vous facilitent la tâche. Plus important encore, certaines de ces bibliothèques gèrent les changements de configuration de périphérique pour vous.
La réponse originale est conservée ci-dessous pour référence. Mais prenez également le temps d'examiner certaines des bibliothèques clientes Rest pour Android pour voir si elles correspondent à vos cas d'utilisation. Voici une liste de certaines des bibliothèques que j'ai évaluées. Il ne s'agit en aucun cas d'une liste exhaustive.
Réponse originale:
Présentation de mon approche pour avoir des clients REST sur Android. Je ne prétends pas que ce soit le meilleur cependant :) Notez également que c'est ce que j'ai proposé en réponse à mon besoin. Vous devrez peut-être avoir plus de couches / ajouter plus de complexité si votre cas d'utilisation l'exige. Par exemple, je n'ai pas du tout de stockage local; car mon application peut tolérer la perte de quelques réponses REST.
Mon approche utilise juste
AsyncTask
s sous les couvertures. Dans mon cas, j'appelle ces tâches à partir de monActivity
instance; mais pour tenir pleinement compte des cas tels que la rotation de l'écran, vous pouvez choisir de les appeler à partir de l'unService
ou l'autre.J'ai délibérément choisi mon client REST lui-même comme API. Cela signifie que l'application qui utilise mon client REST n'a même pas besoin de connaître les URL REST réelles et le format de données utilisé.
Le client aurait 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 pouvez avoir une méthode Java correspondant à chaque URL de votre API REST (ou même deux - une pour les GET et une pour les POST).
Il s'agit du point d'entrée dans l'API client REST. C'est la couche que l'application utiliserait normalement. Cela pourrait être un singleton, mais pas nécessairement.
La réponse de l'appel REST est analysée par cette couche dans un POJO et renvoyée à l'application.
Il s'agit de la
AsyncTask
couche de niveau inférieur , qui utilise des méthodes client HTTP pour sortir et effectuer cet appel REST.De plus, j'ai choisi d'utiliser un mécanisme de rappel pour communiquer le résultat des
AsyncTask
s à l'application.Assez de texte. Voyons maintenant du code. Prenons une URL API REST hypothétique - http://myhypotheticalapi.com/user/profile
La couche supérieure pourrait ressembler à ceci:
Notez que l'application n'utilise pas le JSON ou XML (ou tout autre format) renvoyé directement par l'API REST. Au lieu de cela, l'application ne voit que le bean
Profile
.Ensuite, la couche inférieure (couche AsyncTask) pourrait ressembler à ceci:
Voici comment une application peut utiliser l'API (dans un
Activity
ouService
):J'espère que les commentaires sont suffisants pour expliquer le design; mais je serais heureux de fournir plus d'informations.
la source
GetResponseCallback
plus générique. Celui que je préfère est d'utiliser une interface de marqueur : Commeinterface IGetResopnse{}
pour désigner toutes les classes qui pourraient être des réponses. Ensuite, j'aiclass Profile implements IGetResponse
etc. Enfin, faireGetResponseCallback
génériqueIGetResponse
comme la borne supérieure :public abstract class GetResponseCallback<? extends IGetResponse>
.«Développer des applications client Android REST» par Virgil Dobjanschi a donné lieu à de nombreuses discussions, car aucun code source n'a été présenté pendant la session ou fourni par la suite.
La seule implémentation de référence que je connaisse (veuillez commenter si vous en savez plus) est disponible sur Datadroid (la session Google IO est mentionnée sous / présentation). C'est une bibliothèque que vous pouvez utiliser dans votre propre application.
Le deuxième lien demande le «meilleur» framework REST, qui est largement discuté sur stackoverflow. Pour moi, la taille de l'application est importante, suivie des performances de l'implémentation.
Par conséquent, je m'en tiens à org.json ou GSON pour des scénarios plus complexes. Pour l'architecture d'une implémentation org.json, j'utilise une classe statique qui représente les cas d'utilisation du serveur (par exemple, findPerson, getPerson). J'appelle cette fonctionnalité à partir d'un service et j'utilise des classes utilitaires qui font le mappage (spécifique au projet) et le réseau IO (mon propre modèle REST pour GET ou POST). J'essaye d'éviter l'usage de la réflexion.
la source
N'utilisez jamais AsynTask pour effectuer une requête réseau ou quoi que ce soit qui doit être persistant. Les tâches asynchrones sont fortement liées à votre activité et si l'utilisateur change l'orientation de l'écran depuis la recréation de l'application, la tâche AsyncTask sera arrêtée.
Je vous suggère d'utiliser le modèle de service avec Intent Service et ResultReceiver. Jetez un œil à RESTDroid . C'est une bibliothèque qui vous permet d'effectuer tout type de requête REST de manière asynchrone et de notifier votre interface utilisateur avec des écouteurs de requête implémentant le modèle de service de Virgil Dobjanschi.
la source
Il existe une autre bibliothèque avec une API beaucoup plus propre et des données de type sécurisé. https://github.com/kodart/Httpzoid
Voici un exemple d'utilisation simple
Ou plus complexe avec des rappels
C'est tout nouveau, mais semble très prometteur.
la source
Il existe de nombreuses bibliothèques et j'utilise celle-ci: https://github.com/nerde/rest-resource . Cela 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. Ce n'est pas axé sur Android, mais je l'utilise et cela fonctionne plutôt bien.
Il prend en charge HTTP Basic Auth. Il fait le sale boulot de sérialisation et de désérialisation des objets JSON. Vous l'aimerez, surtout si votre API est comme Rails.
la source
Clause de non-responsabilité: je suis impliqué dans le projet open source rest2mobile
Une autre alternative en tant que client REST consiste à utiliser rest2mobile .
L'approche est légèrement différente car elle utilise des exemples de repos concrets pour générer le code client pour le service REST. Le code remplace l'URL REST et les charges utiles JSON par des méthodes Java natives et des POJO. Il gère également automatiquement les connexions serveur, les appels asynchrones et POJO vers / depuis les conversions JSON.
Notez que cet outil est disponible en différentes versions (cli, plugins, support android / ios / js) et vous pouvez utiliser le plugin android studio pour générer l'API directement dans votre application.
Tout le code peut être trouvé sur github ici .
la source
Nous avons ouvert notre bibliothèque cliente REST asynchrone légère pour Android, vous pourriez la trouver utile si vous avez des exigences minimales et que vous ne voulez pas gérer vous-même le multithreading - c'est très bien pour les communications de base mais pas un client REST complet bibliothèque.
Il s'appelle libRESTfulClient et peut être trouvé sur GitHub .
la source