web-dev-qa-db-fra.com

quel est l'avantage d'utiliser Alamofire par rapport à NSURLSession/NSURLConnection pour la mise en réseau?

Quelqu'un peut-il m'aider à comprendre ces questions: quel est l'avantage d'utiliser Alamofire par rapport à NSURLSession/NSURLConnection? 

Quelles sont les différences entre NSURLSession et NSURLConnection?

19

NSURLConnection est l'ancienne API d'Apple pour la mise en réseau (par exemple, l'envoi de requêtes HTTP et la réception de réponses), tandis que NSURLSession en est la nouvelle. Le dernier est de niveau supérieur et est généralement beaucoup plus facile et implique moins de code standard à utiliser par la plupart des développeurs d’applications - il n’ya fondamentalement aucune raison de l’utiliser, sauf dans le code hérité que vous ne souhaitez pas mettre à jour. 

Un peu d’histoire: avant la sortie de NSURLSession, une bibliothèque tierce, AFNetworking, était devenue le standard de facto pour la mise en réseau dans l’objectif C, car elle fournissait une API plus simple et plus pratique que NSURLConnection (qui en était un emballage) ces jours-ci, il encapsule NSURLSession à la place). Le même développeur a par la suite créé une bibliothèque similaire pour Swift, appelée AlamoFire, afin de tirer pleinement parti de "la méthode Swift" (au lieu d’ajouter des liaisons Swift à AFNetworking). À peu près au même moment, NSURLSession est sorti et il semblait assez évident qu'Apple avait été inspiré par AFNetworking et souhaitait rendre leur nouvelle API de réseau aussi facile à utiliser. Je pense qu'ils ont réussi. Cela signifie que si auparavant, AFNetworking ou AlamoFire sur NSURLSession était le seul choix judicieux pour la plupart des développeurs, utiliser AFNetworking à la place de NSURLConnection était bien plus modeste. Aujourd'hui, les avantages de cette solution sont bien plus modestes. Commencez par utiliser NSURLSession et examinez AlamoFire uniquement s’ils ont l’impression de rencontrer des limitations ou des inconvénients suffisamment importants pour justifier l’ajout d’une autre dépendance.

10
Martin Gjaldbaek

Alamofire est construit sur NSURLSession et comporte moins de lignes de code pour faire des interactions REST avec (POST/GET/PUT/etc). Cela vous prendra "90%" du chemin, mais si vous devez faire des appels réseau très spécialisés, vous devrez utiliser NSURLSession.

Ex: appel simple Alamofire qui obtient JSON

Alamofire.request(.GET, "https://www.google.com/",encoding: .JSON).responseJSON {response in
        if(response.result.error == nil){
            print(response.data)
        }else{
            print("Network Error")
        }
}

NSURLConnection est maintenant obsolète et NSURLSession est le nouveau standard . https://developer.Apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html

2
Ben

Permettez-moi d’abord de répondre à la différence entre NSURLSession et NSURLConnection

  1. NSURLConnection: si nous avons une connexion ouverte avec NSURLConnection et disons que vous fermez votre application, tout ce que nous avons reçu ou envoyé est perdu.

  2. NSURLSession: Ici, ce cas est traité à l'aide d'une méthode de délégué d'application.

    application:handleEventsForBackgroundURLSession:completionHandler

Voici un lien i trouvé qui pourrait être utile pour mieux expliquer la différence entre les deux

passons à votre question initiale concernant l'avantage d'Alamofire par rapport à la classe de framework par défaut. Je viens tout juste de partager mon expérience sur ce que j'ai fait jusqu'à présent, alors préparez-vous, car la lecture est longue.

Pour moi, la règle du pouce n’est de contourner le cadre que si vous avez une bonne raison de le faire, quelle que soit la technologie que vous utilisez.

La raison derrière cela est que j'ai utilisé une bibliothèque tierce dans le passé et que cela ne s'est pas bien terminé avec les dernières mises à jour d'iOS. Supposons que si vous avez une application payante et que votre bibliothèque tierce cesse de fonctionner, l'application de votre client perdra sa valeur et finira par avoir des commentaires négatifs sur l'App Store.

Je conseille avant d'utiliser une bibliothèque tierce s'il vous plaît assurez-vous de vérifier les questions données

  1. quelle est la fréquence des mises à jour?
  2. combien de bugs ouverts sont ouverts?
  3. Vaut-il vraiment la peine de l’utiliser ou pouvez-vous utiliser les classes du framework?
  4. Quelle est la licence de cette bibliothèque?

Pour en revenir à la question, j’ai utilisé Alamofire dans un projet qui consistait simplement à faire des appels get, post et put avec certaines fonctionnalités de synchronisation hors ligne.

Maintenant, en y réfléchissant, j'aurais pu créer ma propre classe avec URLSessions et gérer la réponse en conséquence. Il n'était donc pas nécessaire d'utiliser Alamofire, car je ne faisais rien de spécial ici.

Je crois que tout cela était réalisable par le framework par défaut que par un tiers mais je l’ai quand même utilisé. Pourquoi est-ce que je l'utilisais ne savais peut-être pas que j'étais curieux mais une leçon apprise ici était que j'aurais pu réaliser la même chose en utilisant des classes de framework, si supposons que la bibliothèque cesse de fonctionner, je n'aurais aucune idée de la raison pour laquelle elle fonctionne avoir à s’appuyer sur un correctif de la part du responsable/de l’auteur de cette bibliothèque, qui peut prendre un mois, une semaine, un jour, qui sait?

Une fois, j’ai utilisé une bibliothèque pour une fonctionnalité que je voulais mais cette même fonctionnalité avait un défaut ouvert et n’a jamais été mise à jour. J’ai donc créé ma propre coutume et jusqu’à aujourd’hui, cela fonctionne bien, alors parcourez toute la section des défauts ouverts. éviter les surprises imprévues.

De plus, comme mentionné dans la réponse ci-dessus, utilisez uniquement des composants tiers et uniquement lorsque vous rencontrez des limitations avec le framework par défaut et même avant, vérifiez quand, la dernière fois que cette bibliothèque a été mise à jour, quelle licence il a et combien de défauts ouverts sont là.

1
NSDumb

Pour Swift 3.0 et les versions ultérieures, Alamofire est préférable car il est bien optimisé et réutilisable. Il présente également de nombreuses fonctionnalités intégrées. Alamofire appelle à une approche similaire dans la mesure où elle crée un routeur en se conformant à un protocole, URLRequestConvertible. Sous le capot, Alamofire appelle à l’utilisation d’un pattern singleton construit au-dessus d’une configuration NSURLSessionConfiguration.

0
Krishna Thakur

L'avantage est qu'il existe un niveau d'abstraction plus élevé, ce qui vous permet d'écrire moins de lignes de code. Cependant, il n'y a toujours pas de support officiel pour Codable. La mise à jour de la version de Swift peut comporter des inconvénients, mais je pense que cela devrait s’améliorer avec la stabilité d’ABI dans Swift 5. Vous devez également prendre en compte les vulnérabilités de sécurité.

À l'époque des objectifs Objective C et NSURLConnection, des bibliothèques comme AFNetworking avaient beaucoup de sens, mais avec Swift, Codable et URLSession, je pense qu'il est moins judicieux d'utiliser Alamofire.

0
Some One