Lors de la crĂ©ation dâune API, il est important de ne pas se lancer tĂȘte baissĂ©e et de rĂ©flĂ©chir Ă lâarchitecture de votre API, quitte Ă tout poser sur papier avant. Quel sera le rĂŽle de votre API ? Quelles seront les ressources ? Quels seront les diffĂ©rents accĂšs autorisĂ©s pour les utilisateurs ?
Bien structurer votre API dĂšs le dĂ©but de sa conception vous permettra dâanticiper les erreurs mais aussi dâavoir une API plus solide et mieux conçue.
Dans ce chapitre, vous ne coderez pas une API mais allez la concevoir. Câest un exercice de rĂ©flexion, afin de vous prĂ©parer au mieux Ă la crĂ©ation dâune API.
Dans cette partie, nous allons rĂ©flĂ©chir Ă la maniĂšre de concevoir une API pour une application de partage de photos nommĂ©e InstaPhoto. đžÂ Nous voulons que les utilisateurs puissent publier et partager des photos avec leurs amis, commenter les photos des autres, crĂ©er des hashtags, rechercher des photos par localisation, la totale, le grand jeu !
Prenez une minute pour Ă©crire ce Ă quoi vous avez besoin de rĂ©flĂ©chir lors de la conception dâune API pour InstaPhoto. De quelles ressources avez-vous besoinâ? Quels URI seraient comprĂ©hensibles par dâautres dĂ©veloppeurs ? Câest aussi une belle occasion de revoir ce que vous avez appris dans les parties prĂ©cĂ©dentes â!
Voici quelques exemples de ressources dont vous aurez absolument besoin :
Photo ;
User ;
Location (localisation, en français) ;
Post.
à partir de là , vous pouvez commencer à réfléchir à des questions importantes, comme celles-ci :
Quels endpoints auront besoin dâautorisationsâ?
Quelles ressources voulez-vous pouvoir mettre Ă jourâ?
Aurez-vous besoin de pouvoir modifier des publications aprĂšs leur crĂ©ationâ?
Les commentaires doivent-ils pouvoir ĂȘtre supprimĂ©sâ?Â
Avez-vous besoin de toutes les opĂ©rations CRUD pour chaque ressourceâ? Ou seulement dâune ou deuxâ? Lesquelles ?
Il nây a pas de bonne ou de mauvaise rĂ©ponse ici â cela dĂ©pend simplement de lâapplication InstaPhoto que vous voulez dĂ©velopperâ! Ă vous de choisir ! âš
Lors de la conception dâendpoints, le naming (ou nommage, en français) est un Ă©lĂ©ment clĂ©. Vous voulez que les dĂ©veloppeurs qui lâutilisent comprennent naturellement ce que chaque endpoint est censĂ© faire. Les conventions de naming actuelles demandent dâinclure uniquement la ressource que vous voulez mettre Ă jour, et non le verbe que vous voulez mettre en Ćuvre.Â
Pour faire simple, utilisez uniquement le nom de la ressource dans lâURI, car lâaction se trouve dĂ©jĂ dans le verbe HTTP. Cela donnerait :Â
POST /photo
PUT /photo
GET /photo
Puisque que le verbe de lâaction est dĂ©jĂ inclus dans la requĂȘte HTTP, il nâest pas nĂ©cessaire de le prĂ©ciser lors de la conception des endpoints.
Pour que vous puissiez mieux comprendre, des endpoints mal nommés ressembleraient à ceci :
POST /createPhoto
PUT /updatePhoto
GET /getPhoto
Considérons les endpoints possibles pour notre InstaPhoto.
Ici aussi, il nây a pas de bonne ou de mauvaise rĂ©ponse, cela dĂ©pend simplement des besoins de votre application et de la façon dont vous voulez la concevoir.
Imaginons que vous vouliez que les utilisateurs soient en capacitĂ© de crĂ©er, voir et supprimer des photos â mais pas de les modifier une fois publiĂ©es. Tous ces Ă©lĂ©ments nĂ©cessitent Ă©galement une authentification, car vous ne voudriez pas que les utilisateurs puissent publier, modifier ou supprimer des photos qui ne leur appartiennent pasâ! đ
Maintenant, prenez une feuille de papier et Ă©crivez quelques endpoints pour crĂ©er, voir et supprimer des photos. Rappelez-vous que vous voudrez peut-ĂȘtre spĂ©cifier une photo en particulier Ă visionner et Ă mettre Ă jour, nonâ? đ Une fois que vous aurez fini, regardez juste en-dessous si ce que vous avez Ă©crit correspond Ă mes rĂ©ponses.
Vu que lâon veut gĂ©nĂ©ralement voir ou supprimer des photos en particulier, le fait dâajouter un ID pour les deux derniers endpoints est logique. Il permet Ă lâAPI de savoir de quelle photo il sâagit.
Et maintenant, vos utilisateursâ! De quels verbes HTTP aurez-vous besoin pour un compte utilisateurâ? đ€ Et puis, mĂȘme si vous ne voulez pas que les utilisateurs puissent modifier leurs photos une fois quâelles sont dĂ©jĂ créées, il doivent au moins pouvoir modifier leur profil utilisateurâ! Par ailleurs, vous voulez quâils puissent voir les informations disponibles publiquement sur un utilisateur sans authentification (exactement comme lâAPI GitHub) ; donc pour cet endpoint, vous nâaurez pas besoin dâauthentification. Quelles sortes dâendpoint pourriez-vous concevoir pour celaâ?
Et maintenant, les commentaires â! Comment les ajouterâ? Si vous voulez que les utilisateurs puissent commenter les photos dâun autre utilisateur, il vous faudra imbriquer une ressource dans une autre. Et ce, parce quâun commentaire doit ĂȘtre associĂ© Ă une photo spĂ©cifique. Par exemple, imaginons que vous vouliez crĂ©er un nouveau commentaire pour une photo avec ID. Vous pourriez crĂ©er lâendpoint POST /photos/{photoId}/comments. Utilisez POST parce que vous crĂ©ez quelque chose. Ensuite, travaillez en arriĂšre : crĂ©ez un commentaire (/comments) pour une photo spĂ©cifique (/{photoId}) parmi toutes les autres photos (/photos).
Et maintenant, voici une description de trois endpoints supplémentaires que vous devrez créer :
obtenir tous les commentaires pour une photo spĂ©cifique avec lâID {photoId} ;
obtenir le commentaire avec lâID {commentId} pour la photo avec lâID {photoId} ;
supprimer le commentaire avec lâID {commentId} pour la photo avec lâID {photoId}.
Vous ne voulez pas que les commentaires soient modifiables, nâincluez donc pas dâendpoint pour cela. Essayez dâĂ©crire les endpoints pour ces trois Ă©lĂ©ments.
Tous ces endpoints nĂ©cessitent une authentification, car ils doivent seulement ĂȘtre modifiables par lâutilisateur qui les a créés, et non les autres. Et vous pourriez adopter le mĂȘme mode de raisonnement pour toutes les autres ressources dont vous aurez besoin.
Lors de la planification, pensez à quelles opérations CRUD seront nécessaires aux ressources.
Utilisez des noms de ressources et non des verbes en nommant les endpoints.
Pensez aux ressources que vous devrez imbriquer dans dâautres ressources.
Pensez aux ressources qui nécessiteront une authentification.
Vous avez la liste des opérations CRUD nécessaires, vos ressources et leur nom, les ressources complémentaires, celles qui nécessiteront une authentification, la liste de vos endpoints. Votre base est solide, mais vous pouvez approfondir le tout avec la recherche, par exemple. Passez au chapitre suivant, nous allons étoffer nos endpoints grùce à quelques fonctionnalités avancées !