Distinction entre API et frontend-backend

23

J'essaie d'écrire un site Web d'entreprise "standard". Par "standard", je veux dire que ce site exécute le HTML5, CSS et Javascript habituel pour le front-end, un back-end (pour traiter les trucs), et exécute MySQL pour la base de données. C'est un site CRUD de base: le front-end fait juste ce que la base de données a en magasin; le backend écrit dans la base de données tout ce que l'utilisateur entre et effectue un traitement. Tout comme la plupart des sites.

En créant mes référentiels Github pour commencer le codage, j'ai réalisé que je ne comprenais pas la distinction entre le back-end frontal et l' API . Une autre façon de formuler ma question est: où l'API entre-t-elle dans cette image?

Je vais énumérer quelques détails supplémentaires, puis les questions que j'ai - j'espère que cela vous donnera une meilleure idée de ma véritable question, car je suis tellement confus que je ne connais pas la question précise à poser.

Quelques détails supplémentaires:

  • Je voudrais essayer le modèle Model-View-Controller. Je ne sais pas si cela change la question / réponse.
  • L'API sera RESTful
  • J'aimerais que mon serveur principal utilise ma propre API au lieu de permettre au serveur principal de tricher et d'appeler des requêtes spéciales. Je pense que ce style est plus cohérent.

Mes questions:

  • Le front-end appelle-t-il le back-end qui appelle l'API? Ou le front-end appelle-t-il simplement l'API au lieu d'appeler le back-end?
  • Le back-end exécute-t-il simplement une API et l'API renvoie le contrôle au back-end (où le back-end agit comme le contrôleur ultime, déléguant des tâches)?

Des réponses longues et détaillées expliquant le rôle de l'API aux côtés du serveur principal sont encouragées. Si la réponse dépend du modèle de programmation (modèles autres que le modèle Model-View-Controller), veuillez décrire ces autres façons de penser l'API. Merci. Je suis très confus.

Jason
la source

Réponses:

25

Je pense que vous êtes confus par la façon dont le terme API est utilisé à mauvais escient et abusé par de nombreux développeurs Web.

  • API signifie Interface de programmation d'application, c'est-à-dire toute interface officiellement spécifiée entre différents systèmes (ou parties du même système).
  • Il y a quelque temps, il était devenu important pour une startup Web d'offrir un accès public à certaines de ses données internes via une API de service Web, généralement en utilisant REST et JSON, permettant ainsi aux développeurs tiers de s'intégrer à leurs systèmes. Les développeurs Web ont commencé à utiliser le terme "API" pour signifier spécifiquement (et uniquement) "service Web accessible au public", et en l'utilisant à mauvais escient pour inclure sa mise en œuvre.
  • En termes de frontend et de backend, cette API de service Web (et son implémentation) est le backend . Certaines parties peuvent être accessibles au public et d'autres uniquement à votre frontend.
  • Un nom différent pour cela est "couche de service", c'est-à-dire un code qui
    • représente les services que le frontend appelle
    • ne contient aucune logique d'affichage (c'est le travail du frontend, après tout)
    • est plus abstrait et plus grossier que les actions CRUD simples (un appel de service impliquera souvent plusieurs actions CRUD et devrait être exécuté dans une transaction de base de données).
    • contient la logique métier de l'application
Michael Borgwardt
la source
J'ai une question vraiment stupide. Est-ce là l'essence de l'architecture orientée services?
johnny
@johnny: non - SOA est un concept à un niveau d'abstraction beaucoup plus élevé, il s'agit plus de la façon dont vous organisez les fonctionnalités de votre entreprise que des couches techniques.
Michael Borgwardt
Je n'appellerais pas cela une mauvaise utilisation. Peut-être "rebranding"? C'est la même chose avec "MVC" qui est dans le contexte du développement Web quelque chose de complètement différent de l'époque de PARC lorsque le terme a été inventé.
Thomas Junk
9

Esquissons l'architecture d'un site web "typique", avec à la fois un "front-end" et un "back-end". Et comme c'est un site internet, nous aurons aussi explicitement un "client". (Puisqu'il n'y a aucun moyen pour JavaScript dans un navigateur d'appeler directement MySQL sur un serveur.)

Pour plus de clarté, les termes que nous utilisons sont:

  • Client : le navigateur compatible HTML5, esp. le DOM et le JavaScript sont chargés pour le manipuler.
  • Front-End : le serveur PHP vers lequel le DOM est pointé, contenant à la fois la page individuelle demandée et certains points d'accès XML ou JSON de style AJAX.
  • Back-end : un serveur de base de données sur lequel MySQL s'exécute.

Pour un programme correctement conçu, chacun de ces composants possède une API privée pour communiquer avec les autres. Le code PHP «frontal» n'émet pas SELECTdirectement des instructions SQL arbitraires , mais appelle plutôt des procédures stockées, du SQL préautorisé ou même des appels PHP distincts vers une instance entièrement différente de PHP qui s'exécute sur le serveur principal . Ces procédures stockées ou appels HTTP distincts sont eux-mêmes une API.

La définition ne change pas même si nous autorisons une certaine impureté de notre conception. Si votre PHPfichier écrit et envoie une chaîne SQL directement à MySQL, C'EST TOUJOURS UNE API , quoique très inhabituelle que vous ne répéterez probablement pas.

Notez qu'il est tout à fait possible que votre php frontal soit strictement synchrone, sans aucun vaudou AJAX. Si vous appelez les mêmes fonctions PHP externes dans ledit fichier synchrone, vous pouvez les considérer comme utilisant la même API que la version côté client, bien que l'utilisation du terme "API" ici ne donne pas vraiment de clarté.

Une API en tant qu'interface de programmation d'application , après tout, et se réfère vraiment à chaque fois qu'un programme appelle en dehors de son propre processus. Si vous écrivez un projet qui a à la fois un front-end et un back-end, que ce soit AJAX / PHP / MySQL comme ci-dessus ou MS Access / SQL Server, il vaut la peine de spécifier explicitement comment vous vous appellerez, si pour aucune autre raison que pour qu'il soit facile de savoir où chercher quand quelque chose se casse.

(Et le sujet de l'API publique est tout autre chose. Dans notre exemple ci-dessus, seule l'URL affichée dans le client est une "API publique". Tout le reste est, par essence, "privé". Comme dans, vous ne vous attendez pas tout code échappant à votre contrôle pour appeler votre API interne, et vous pouvez soit refuser catégoriquement ces résultats, soit vous réserver le droit de le faire à l'avenir.

DougM
la source
3
En fait, le frontend est le code côté client (HTML, Javascript) et le backend est le code serveur (PHP, Python, Ruby).
Pithikos
-3

une API gère les requêtes http telles que GET, POST, FETCH, DELETE ... qui peuvent être utilisées en fonction de votre accès au jeton pour récupérer des données dans un format spécifique tel que json, xml, etc.

Ces "données" peuvent être utilisées dans votre propre application pour obtenir l'API (Application Programming Interface) qui est un service Web accessible au public pour recueillir des données qui pourraient être intéressantes pour certains publics.

Ces données peuvent renvoyer un ensemble de données représentant l'échec ou récupérer des données à partir de son serveur API

L'API est destinée à être back-end et peut donc être utilisée dans n'importe quel environnement frontal. Cela signifie qu'il peut être utilisé dans une application web, android, ios ... qui peut gérer les requêtes https

Balibrera
la source