Meilleures pratiques de dev pour un client HTTP + XML sans HTTP

damdamdamdam Membre
avril 2009 modifié dans API AppKit #1
Bonjour tout le monde

C'est mon premier message sur ce forum. J'espère que je poste au bon endroit.

Voila mon mini problème.

Je suis en train de développer une petite application pour gérer toutes mes séries. Je souhaite me servir de l'API XML de thetvdb.com. J'ai mon début d'application et tout fonctionne correctement.J'ai développé deux classes TheTVDBEngine (mirrors, ids des séries et épisodes, codes de retour,  sélection des fichiers ZIP, Jpeg et XML) et HTTPClient qui est un client http minimaliste cocoa.

Pour accélérer mon développement, j'ai aussi des fichiers XML locaux situés quelque part sur mon disque local (techniquement dans le bundle de l'application). Du coup, plutôt que de faire des requêtes HTTP pendant le développement du client HTTP (avec la latence, les timeouts), je charge le fichier, et je fais comme-ci le serveur avait effectivement répondu.

Je voudrais savoir quelle est la meilleure manière pour bien séparer le code de développement du code de parsing XML. A mon niveau, j'ai résolu le problème avec une troisième classe qui ajoute une catégorie "mock" (c'set pas le meilleur nom, mais dans l'esprit c'est cela) à  ma classe HTTPClient. J'utilise ensuite la méthode respondsToSelector pui performSelector, et j'ai quelques petits bouts qui dépassent dans ma classe HTTPClient. Ces petits bouts me dérangent pas plus que cela (je vois cela comme le port JTAG pour le hardware), mais j'aurais voulu savoir s'il existait une meilleur méthode pour consommer du HTTP+XML sans la partie HTTP (qui sera étoffée et débugguée plus tard)

Merci d'avance, les pros

J'ai quelque chose comme cela :

httpclient+mock.h
<br /><br />#import &lt;Cocoa/Cocoa.h&gt;<br />#import &quot;HTTPClient.h&quot;<br /><br />@interface HTTPClient(mock)<br /><br />- (bool) initMock;<br />- (NSData *) getMockData: (NSString *) stringURL;<br />- (void) addSampleFile: (NSString *) sampleFile forMatchingURL: (NSString *) matchingURL;<br />- (NSString *) matchFileWithURL: (NSString *) stringURL;<br /><br />@end<br />

et dans mon HTTPClientm, j'ai cela :


<br />#import &quot;HTTPClient.h&quot;<br />@implementation HTTPClient<br /><br /><br />- (id) init<br />{<br />	if ([super init])<br />	{<br />		localCache = nil;<br />		instanceError = nil;<br /><br />		isMockClient = [self respondsToSelector:@selector(getMockData)];<br />		if (isMockClient) [self performSelector:@selector(initMock)];<br />	}<br />	return self;<br />}<br /><br /><br /><br />- (NSXMLDocument *) getXMLData: (NSString *) stringURL fromSource : (int) source<br />{<br />	DebugLog([NSString stringWithFormat: @&quot;Trying to get %@&quot;, stringURL]);<br />	NSXMLDocument *XMLDocument = nil;<br />	NSData *XMLData = nil;<br />	<br />	switch (source) {<br />		case HTTP_CHECK_IN_SAMPLES:<br />			XMLData = [self getSampleData: stringURL]; // don&#39;t ask the server for development<br />			break;<br />		case HTTP_CHECK_IN_CACHE:<br />			XMLData = [self getCacheData: stringURL];<br />		default:<br />			XMLData = [self getHTTPData: stringURL];<br />			break;<br />	}<br />	XMLDocument = [[NSXMLDocument alloc] initWithData:XMLData options:0 error: &amp;instanceError];<br />	return XMLDocument;<br />}<br /><br />- (NSData *) getSampleData: (NSString *) stringURL<br />{<br />	DebugLog(@&quot;reading from sample : %@&quot;, stringURL);<br />	if (isMockClient) return [self performSelector:@selector(getMockData) withObject: stringURL];<br />	return nil;<br />}<br /><br />- (NSData *) getCacheData: (NSString *) stringURL<br />{<br />	DebugLog(@&quot;reading from cache : %@&quot;, stringURL);<br />	return [[self localCache] getURL: stringURL];<br />}<br />	<br /><br />- (NSData *) getHTTPData: (NSString *) stringURL<br />{<br /><br />...<br />}<br />@end
Connectez-vous ou Inscrivez-vous pour répondre.