28 votes

Objective-C : La meilleure façon d'accéder à l'API REST sur votre iphone

Je me débats avec cette question depuis un certain temps. J'essaie d'accéder à une api REST sur mon iPhone et je suis tombé sur le framework ASIHTTP qui pourrait m'aider. J'ai donc fait quelque chose comme

//call sites, so we can confirm username and password and site/sites
NSURL *url = [NSURL URLWithString: urlbase];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setUsername:@"doronkatz%40xx.com" ];
[request setPassword:@"xxx"];

urlbase est une url vers un site REST.

Un développeur m'a dit qu'il y avait peut-être un problème ou un bogue avec ce cadre, et qu'il ne transmettait pas les en-têtes correctement. Existe-t-il un autre moyen de tester ou d'accéder avec authentification à un emplacement REST du réseau ?

31voto

Blake Watters Points 5330

Je vous recommande de vérifier RestKit : http://restkit.org/ Il fournit une excellente API pour accéder aux services Web RESTful et représenter les ressources distantes en tant qu'objets locaux, y compris pour les persister dans Core Data. L'authentification HTTP est prise en charge d'emblée.

10voto

bcattle Points 475

Je suis nouveau dans le développement iOS et je me suis battu avec certains des grands frameworks listés sur cette page depuis environ un mois. C'est un cauchemar. Je vous recommande honnêtement de vous en tenir aux principes de base et de le faire vous-même en utilisant AFNetworking ou celui d'Apple NSURLConnection .

L'une des bibliothèques répertoriées n'est plus gérée. Une autre a récemment subi d'énormes changements d'API qui ont cassé le code et la moitié des tutoriels décrivant son utilisation ne fonctionnent plus. D'autres sont massivement gonflées.

C'est plus facile que vous ne le pensez. Quelques ressources qui m'ont aidé :

Les exemples sur le Page d'accueil d'AFNetworking peut à lui tout seul t'amener à 80% de l'objectif.

UPDATE : Le site Cadre du manteau (open sourced par Github Inc.) est bien conçu et facile à utiliser. Il gère cartographie des objets : conversion d'un fichier JSON NSDictionary à vos propres classes de modèle Objective-C personnalisées. Il gère judicieusement les cas par défaut et il est assez facile de mettre en place ses propres transformateurs de valeur, par exemple de chaîne à NSURL ou une chaîne de caractères pour votre enum .

6voto

paulthenerd Points 6568

J'ai quelques applications qui utilisent un cadre appelé Ressource objective qui fournit une enveloppe pour accéder à des API distantes basées sur REST. Il est principalement destiné aux applications basées sur Ruby on Rails, donc son analyse XML/JSON peut être modifiée pour gérer certains défauts de Rails, mais il vaut la peine de le regarder. Il supporte l'authentification de base http par défaut.

2voto

petert Points 5082

Je suis juste tombé sur cette question - vous pourriez trouver LRResty assez intéressant puisqu'il utilise la NSOperation, les blocs etc, voir : GitHub pour les sources (licence MIT). Je suis en train de l'expérimenter - il y a aussi un exemple d'application.

1voto

Ramin Points 10412

J'ai utilisé ASIHTTP dans deux applications jusqu'à présent et je n'ai eu aucun problème.

On dirait que vous utilisez HTTP Basic Auth avec le site distant. Essayez d'accéder à la même URL REST depuis un navigateur standard et passez-lui les paramètres dont vous avez besoin. Il devrait vous demander un nom d'utilisateur/mot de passe. Si vous y parvenez, vous savez au moins que le côté serveur est configuré pour traiter les demandes. Si ce n'est pas le cas, vous devez discuter avec le développeur.

La prochaine chose à essayer est de mettre un renifleur de réseau basé sur Mac et de voir quels en-têtes vont et viennent. N'importe lequel de HTTPScoop, Wireshark, ou Charles devrait fonctionner. Exécutez le renifleur en tant que proxy réseau puis exécutez votre application dans le simulateur et regardez ce qui passe. Essayez à nouveau avec le navigateur. Une fois que vous voyez les différences, vous pouvez utiliser la fonction addRequestHeader méthode sur ASIHTTPRequest pour ajouter tout en-tête spécifique attendu par le serveur.

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