Développement d'une API Web ASP.NET

L'API Web ASP.NET est une structure permettant de créer des API Web au-dessus du .NET Framework qui utilise HTTP. Comme presque toutes les plateformes auxquelles vous pouvez penser ont une bibliothèque HTTP, les services HTTP peuvent être consommés par un large éventail de clients, y compris des navigateurs, des appareils mobiles et des applications de bureau traditionnelles..

L'API Web ASP.NET exploite les concepts de HTTP et fournit des fonctionnalités telles que:

  • Différents types de demande / réponse pris en charge tels que HTML, JSON et fichiers binaires (image / audio / vidéo) et pas uniquement le contenu XML requis par SOAP.
  • Mappage d'actions intégré dans le contrôleur, basé sur les verbes HTTP (GET, POST, etc.)

Création d'une API Web

Pour créer une API Web, nous allons utiliser Visual Studio. Si vous avez Visual Studio 2012 ou une version supérieure de celui-ci, vous êtes donc prêt à commencer avec votre API Web..

Commencer un nouveau projet

Du Fichier menu, sélectionnez Nouveau et alors Projet.

dans le Modèles volet, sélectionnez Modèles installés et élargir le Visual C # nœud. Sous Visual C #, sélectionner Web. Dans la liste des modèles de projet, sélectionnez Application Web ASP.NET. Définissez votre nom préféré pour le projet et cliquez sur D'accord.

Dans la fenêtre suivante, une liste de modèles vous sera présentée. Bien que vous puissiez sélectionner l’un des modèles dans la liste car ils contiendront tous des fichiers DLL et les configurations requises pour créer des contrôleurs Web API, nous sélectionnerons le Projet vide Modèle pour commencer.

Ajout d'un contrôleur

Dans les API Web, un manette est un objet qui gère les requêtes HTTP. Ajoutons rapidement un contrôleur pour tester notre API Web.

Dans Explorateur de solution, clic droit sur le Contrôleurs dossier. Sélectionner Ajouter puis sélectionnez Manette. Nous appellerons le contrôleur TestController et sélectionnez Contrôleur d'API vide parmi les options d'échafaudage pour le modèle.


Visual Studio créera notre contrôleur à partir de la ApiController classe. Ajoutons ici une fonction rapide pour tester notre projet d’API en l’hébergeant dans IIS.

public IEnumerable Get () retourne une nouvelle chaîne [] "hello", "world"; 

Hébergement dans IIS

Nous allons maintenant ajouter notre service dans IIS pour pouvoir y accéder localement. Ouvrez IIS et cliquez avec le bouton droit sur Site Web par défaut ajouter notre service web.


dans le Ajouter une application boîte de dialogue, nommez votre service TestAPI et fournissez un chemin d'accès au chemin racine du projet Visual Studio, comme indiqué ci-dessous.

Cliquez sur D'accord et notre service API Web est prêt.

Pour vérifier si tout fonctionne correctement, essayons l’URL suivante dans n’importe quel navigateur: http: // localhost / TestAPI / api / test.

Si vous avez nommé votre contrôleur TestController comme je l'ai et aussi nommé votre service Web dans IIS TestAPI alors votre navigateur doit renvoyer un fichier XML comme indiqué ci-dessous avec les valeurs de chaîne Bonjour le monde.

Cependant, si votre IIS n’a pas l’autorisation pour le dossier de projet, vous pourriez recevoir un message d'erreur disant: "La page demandée est inaccessible car les données de configuration associées à la page ne sont pas valides. "

Si vous obtenez ce type d'erreur, vous pouvez le résoudre en donnant un accès en lecture / écriture au IIS_IUSRS groupe d'utilisateurs dans le dossier racine.

Routage

Voyons maintenant comment fonctionne l'URL fournie au navigateur..

Le routage ASP.NET gère le processus de réception d'une demande et son mappage à une action du contrôleur. Le routage des API Web est similaire au routage MVC mais avec quelques différences. L'API Web utilise le type de requête HTTP au lieu du nom de l'action dans l'URL (comme dans le cas de MVC) pour sélectionner l'action à exécuter dans le contrôleur..

La configuration du routage pour Web API est définie dans le fichier. WebApiConfig.cs. La configuration de routage par défaut de l’API Web ASP.NET est illustrée ci-dessous:

public static class WebApiConfig registre public statique de vides (configuration HttpConfiguration) config.Routes.MapHttpRoute (nom: "DefaultApi", routeTemplate: "api / contrôleur / id", par défaut: nouveau id = RouteParameter.Optional ) 

Le modèle de routage par défaut de l’API Web est api / controller / id. C'est pourquoi nous avions "api"dans notre URL http: // localhost / TestAPI /api/tester.

Lorsque l'API Web reçoit une demande GET pour un contrôleur particulier, la liste des actions correspondantes correspond à toutes les méthodes dont le nom commence par GET. La même chose est le cas avec tous les autres verbes HTTP. La méthode d'action correcte à invoquer est identifiée en faisant correspondre la signature de la méthode.

Cette convention de dénomination des méthodes d'action peut être remplacée à l'aide de la commande HttpGet,
HttpPut, HttpPost, ou HttpDelete attributs avec les méthodes d'action.

Donc, si nous remplaçons notre code précédent par ceci:

[HttpGet] public IEnumerable Hello () retourne une nouvelle chaîne [] "hello", "world"; 

Et appuyez sur http: // localhost / TestAPI /api/ test sur notre navigateur, le résultat sera toujours le même. Si on enlève le HttpGet attribut, notre API Web ne pourra pas trouver d'action correspondante pour notre requête.

Ajoutons maintenant une autre méthode portant le même nom Bonjour mais avec une signature différente.

[HttpGet] public IEnumerable Hello (id chaîne) retourne une nouvelle chaîne [] id, "world"; 

En utilisant cette méthode, nous pouvons maintenant contrôler ce qui est renvoyé de notre service dans une certaine mesure. Si nous testons cette méthode en appelant http: // localhost / TestAPI / api / test / namaste (remarquez un paramètre supplémentaire à la fin de l'URL), nous obtiendrons le résultat suivant:

Donc, maintenant nous avons deux méthodes appelées Bonjour. On ne prend aucun paramètre et retourne les chaînes "hello world", et une autre méthode prend un paramètre et retourne "votre paramètre monde". 

Bien que nous n'ayons pas fourni le nom de notre méthode à exécuter dans notre URL, le routage ASP.NET par défaut comprend la requête en tant que requête GET et, en fonction de la signature de la requête (paramètres fournis), la méthode particulière est exécutée. Cela convient si nous n’avons qu’une méthode GET ou POST dans notre contrôleur, mais dans la mesure où, dans toute application métier réelle, il existe généralement plus d’une telle méthode GET, ce routage par défaut n’est pas suffisant..

Ajoutons une autre méthode GET pour voir comment le routage par défaut le gère.

[HttpGet] public IEnumerable GoodBye () retourne une nouvelle chaîne [] "au revoir", "monde"; 

Si nous construisons maintenant notre projet et appelons http: // localhost / TestAPI / api / test / dans notre navigateur, nous obtiendrons une erreur indiquant "Plusieurs actions correspondant à la demande ont été trouvées", ce qui signifie que le système de routage identifie deux actions correspondant à la demande GET.

Personnalisation du système de routage par défaut de l'API Web

Pour pouvoir utiliser plusieurs demandes GET provenant du même contrôleur, nous devons modifier l'identificateur de type de demande HTTP avec un identificateur basé sur l'action afin que plusieurs demandes GET puissent être appelées..

Cela peut être fait en ajoutant la configuration de route suivante avant la configuration par défaut dans WebApiConfig.cs.

config.Routes.MapHttpRoute (name: "DefaultApi2", routeTemplate: "api / contrôleur / action / id", par défaut: new id = RouteParameter.Optional);

Maintenant, testez les trois méthodes en appelant ces URL:

  • http: // localhost / TestAPI / api / test / hello
  • http: // localhost / TestAPI / api / test / hello / my
  • http: // localhost / TestAPI / api / test / au revoir

Structure de service API Web pour appareils mobiles

Maintenant que l’idée de base sur la manière dont les actions des contrôleurs peuvent être exposées via l’API est bien comprise, voyons comment un service d’API peut être conçu pour les clients..

Le pipeline de demandes d'API Web ASP.NET reçoit des demandes de l'application cliente et une méthode d'action dans un contrôleur sera invoquée. La méthode d'action appelle à son tour la couche de gestion pour extraire ou mettre à jour des données, qui à son tour appelle la classe Repository pour renvoyer des données à partir de la base de données..

Sur la base de ce modèle de conception, créons un exemple d'API exposant une liste d'éléments classifiés en tant que service à ses clients..

Créez une classe appelée Modèle classifié à l'intérieur de Des modèles dossier.

classe publique ClassifiedModel public int ClassifiedID get; ensemble;  chaîne publique ClassifiedTitle get; ensemble;  chaîne publique ClassifiedDetail get; ensemble;  public DateTime CreatedDate get; ensemble;  chaîne publique ClassifiedImage get; ensemble; 

Créer deux dossiers BLL et DAL représentant la couche de logique applicative et la couche d'accès aux données.

Créez une classe appelée Dossier classifié à l'intérieur de DAL dossier dans lequel nous allons coder certaines données pour la liste des annonces classées et exposer la liste par une méthode statique.

public class ClassifiedRepository // liste d'objets classifiés public static List classifiedList; ///  /// obtenir la liste des modèles classés ///  ///  Liste statique publique GetClassifiedsList () if (classifiedList == null || classifiedList.Count == 0) CreateClassifiedsList ();  return classifiedList;  ///  /// Commencer une liste d'objets classifiés ///  void statique privé CreateClassifiedsList () classifiedList = new List() new ClassifiedModel () ClassifiedID = 1, ClassifiedTitle = "Voiture en vente", ClassifiedDetail = "Détails de la voiture détails de la voiture", CreatedDate = DateTime.Now, ClassifiedImage = "/carImageUrl.jpg", nouvelle ClassifiedModel ( ) ClassifiedID = 2, ClassifiedTitle = "Maison en vente", ClassifiedDetail = "Détails de la maison détails de la maison détails de la maison", CreatedDate = DateTime.Now, ClassifiedImage = "/houseImageUrl.jpg", nouveau ClassifiedModel () ClassifiedID = 3, ClassifiedTitle = "Chambre à louer", ClassifiedDetail = "Détails de la chambre détails de la chambre", CreatedDate = DateTime.Now, ClassifiedImage = "/roomImageUrl.jpg", nouvelle ClassifiedModel () ClassifiedID = 4, ClassifiedTitle = "Tree on Sale ", ClassifiedDetail =" Détails de l'arbre détails de l'arbre ", CreatedDate = DateTime.Now, ClassifiedImage =" /treeImageUrl.jpg "; 

Ajoutons une autre classe Service classifié à l'intérieur de BLL dossier maintenant. Cette classe contiendra une méthode statique pour accéder au référentiel et renvoyer des objets métier au contrôleur. Sur la base des paramètres de recherche, la méthode renverra la liste des éléments classifiés..

public class ClassifiedService liste statique publique GetClassifieds (string searchQuery) var classifiedList = ClassifiedRepository.GetClassifiedsList (); if (! string.IsNullOrEmpty (searchQuery)) return (de m dans classifiedList où m.ClassifiedTitle.StartsWith (searchQuery, StringComparison.CurrentCultureIgnoreCase), sélectionnez m) .ToList ();  return classifiedList; 

Enfin, nous allons maintenant créer notre contrôleur API Web pour les méthodes liées aux annonces classées..

Semblable à la façon dont nous avons créé notre premier TestController, Créons un contrôleur API avec des actions de lecture / écriture vides appelées Petites annoncesContrôleur et ajoutez les deux méthodes d'action suivantes.

public class ClassifiedsController: ApiController liste publique Get (id chaîne) return ClassifiedService.GetClassifieds (id);  liste publique Get () return ClassifiedService.GetClassifieds (""); 

Nous avons maintenant deux actions exposées via l’API. La première méthode GET sera invoquée si un mot-clé à rechercher est transmis avec la demande. S'il n'y a pas de paramètre d'entrée, la seconde méthode GET sera invoquée. Les deux méthodes renverront une liste de nos objets modèles classés..

N'oubliez pas d'ajouter toutes les références requises aux espaces de noms dans chacun des fichiers de classe ajoutés. Construisez le projet et nous sommes prêts à tester ces deux méthodes maintenant.

Pour afficher les résultats contenant le paramètre de recherche "maison", tapez l’URL suivante dans le navigateur: http: // localhost / TestAPI / api / classifieds / get / house.

Nous devrions obtenir la réponse suivante dans le navigateur:

Pour voir la liste complète des annonces classées, appuyez sur l’URL sans passer aucun paramètre: http: // localhost / TestAPI / api / classifieds / get /.

Vous devriez voir le résultat suivant:

Nous pouvons ajouter autant d’actions et de contrôleurs que souhaité par les clients..

Négociation de contenu

Jusqu'à présent, nous avons vu des exemples d'API qui envoient des réponses XML aux clients. Examinons maintenant d'autres types de contenu, tels que JSON et la réponse d'image, qui relèvent de la négociation de contenu..

La spécification HTTP (RFC 2616) définit la négociation de contenu comme "le processus de sélection de la meilleure représentation pour une réponse donnée lorsque plusieurs représentations sont disponibles."Grâce à la fonction de négociation de contenu de l'API Web, les clients peuvent indiquer aux services de l'API Web le format de contenu accepté, et l'API Web peut servir le même format au client automatiquement, à condition que le format soit configuré dans l'API Web..

Demander le format JSON

L’en-tête HTTP Accept permet de spécifier les types de support acceptés par le serveur.
client pour les réponses. Pour XML, la valeur est définie sur "application / xml"et pour JSON "application / json".

Afin de tester notre API avec les en-têtes HTTP Accept, nous pouvons utiliser les extensions disponibles pour les navigateurs nous permettant de créer des requêtes HTTP personnalisées..

Ici, j'utilise une extension appelée Outil HTTP disponible pour que Mozilla Firefox crée l'en-tête Accept qui spécifie JSON comme type de réponse.

Comme vous pouvez le voir sur l'image, la réponse reçue est au format JSON.

Fichier image en réponse

Enfin, voyons comment nous pouvons envoyer un fichier image en réponse via Web API..

Créons un dossier appelé Images et ajouter une image appelée "default.jpg"à l'intérieur, puis ajoutez la méthode d'action suivante dans notre Petites annoncesContrôleur.

public HttpResponseMessage GetImage () byte [] bytes = System.IO.File .ReadAllBytes (HttpContext.Current.Server .MapPath ("~ / Images / default.jpg"); var result = new HttpResponseMessage (HttpStatusCode.OK); result.Content = new ByteArrayContent (octets); result.Content.Headers.ContentType = new MediaTypeHeaderValue ("image / png"); retourne le résultat; 

En outre, ces deux espaces de noms doivent être inclus: System.Web, System.Web.Http.

Ici, nous créons une réponse HTTP en utilisant le HttpResponseMessage classer et définir les octets de l’image comme contenu de la réponse. Aussi, nous mettons la Type de contenu en-tête à "image / png".

Maintenant, si nous appelons cette action dans notre navigateur, Web API enverra notre default.jpg image en réponse: http: // localhost / TestAPI / api / classifieds / Getimage /.

Conclusion

Dans ce didacticiel, nous avons examiné comment créer et exposer facilement les API Web ASP.NET aux clients en tant que méthodes d’action des contrôleurs MVC. Nous avons examiné le système de routage par défaut et personnalisé, créé la structure de base d'un service API d'application métier en temps réel et avons également examiné différents types de réponses..

Et si vous recherchez des utilitaires supplémentaires à acheter, réviser ou utiliser, consultez l'offre .NET dans CodeCanyon..

J'espère que vous avez apprécié ce didacticiel et que vous l'avez trouvé utile pour la création de vos API Web pour les appareils mobiles. Merci!