Concevez les endpoints de votre API

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.

Concevez une API de partage de photos

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 ! ✹

Créez vos endpoints

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

Simulez des endpoints supplémentaires

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.

En résumé

  • 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 !

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best