2009-06-16 8 views
0

Est-ce que quelqu'un a des suggestions pour GETing ou POSTing aux services Amazon S3 en utilisant leur API REST via l'iPhone. Il ne semble pas que ce soit possible, mais je peux lire les documents erronés.API iPhone pour l'accès à l'API REST d'Amazon S3

Merci d'avance pour votre aide!

L.

+0

Pourquoi cela ne semble-t-il pas possible? C'est juste une API REST après tout. – Kekoa

+0

Au meilleur de ma connaissance, la seule boîte à outils basée sur Cocoa/Cocoa Touch pour accéder à S3 est ConnectionKit. Sinon, vous êtes coincé avec la construction de votre propre, ce qui pourrait devenir une tâche assez complexe. Puis-je demander quels sont les bits de l'API dont vous avez besoin? La version actuelle de ConnectionKit supporte S3 mais est un peu ropey. Nous sommes actuellement en train d'écrire la version 2.0. Si nous avons quelqu'un avec qui travailler spécifiquement pour un protocole, nous pourrions nous concentrer uniquement là-dessus pour notre bénéfice mutuel. S'il vous plaît contactez-moi à http://mikeabdullah.net/other/contact_me.html pour plus de discussion si vous êtes intéressé –

+0

La raison pour laquelle cela ne semble pas possible est que chaque requête authentifiée aux serveurs S3 doit avoir une signature RFC 2104HMAC-SHA1 générée et envoyée avec la demande. À ma connaissance, il n'y a actuellement aucun moyen de le faire sur l'iPhone. Suis-je incorrect ou manque-t-il quelque chose? –

Répondre

3

Dans un cas général, je recommande d'utiliser ASIHttpRequest, il a beaucoup de fonctionnalités intégrées (compatible REST aussi) et beaucoup de choses, ce qui rend la vie plus facile qu'avec NSURLConnection. Il a également S3 support en boîte.

+0

Je pense que vous êtes un peu confus. NSConnection est pour les objets distribués. Très différent de NSURLConnection! –

+0

Oui, vous avez raison, je voulais dire NSURLConnection. Mettra à jour la réponse. –

2

Vous devriez être en mesure d'utiliser les trucs NSURLRequest pour faire ce que vous voulez.

NSMutableData* _data = nil; 

- (IBAction) doIt:(id)sender { 
    NSURL* url = [NSURL URLWithString: @"http://theurl.com/"]; 
    NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL: url]; 
    NSURLConnection* con = [NSURLConnection connectionWithRequest: req delegate: self]; 
    NSData* body = [@"body of request" dataUsingEncoding: NSUTF8StringEncoding]; 

    _data = [NSMutableData new]; 
    [req setHTTPMethod: @"POST"]; 
    [req setHTTPBody: body]; 
    [con start]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [_data appendData: data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString* result = [[[NSString alloc] initWithData: _data encoding: NSUTF8StringEncoding] autorelease]; 

    // process your result here 
    NSLog(@"got result: %@", result); 
} 

Cela n'a pas de contrôle d'erreur dans et doit être stocké dans la variable _data une variable d'instance, mais l'idée générale devrait travailler pour vous. Vous devrez probablement également définir des en-têtes de demande pour indiquer au serveur le codage des données du corps, etc.