Distinción entre API y frontend-backend

23

Estoy tratando de escribir un sitio web comercial "estándar". Por "estándar", quiero decir que este sitio ejecuta el HTML5, CSS y Javascript habituales para el front-end, un back-end (para procesar cosas) y ejecuta MySQL para la base de datos. Es un sitio CRUD básico: el front-end simplemente hace bonito lo que la base de datos tiene en la tienda; el backend escribe en la base de datos lo que sea que ingrese el usuario y realice algún procesamiento. Al igual que la mayoría de los sitios por ahí.

Al crear mis repositorios de Github para comenzar a codificar, me di cuenta de que no entiendo la distinción entre el front-end back-end y la API . Otra forma de formular mi pregunta es: ¿ dónde entra la API en esta imagen?

Voy a enumerar algunos detalles más y luego las preguntas que tengo; espero que esto les dé una mejor idea de cuál es mi pregunta real, porque estoy tan confundido que no sé la pregunta específica que hacer.

Algunos detalles más:

  • Me gustaría probar el patrón Modelo-Vista-Controlador. No sé si esto cambia la pregunta / respuesta.
  • La API será RESTful
  • Me gustaría que mi back-end use mi propia API en lugar de permitir que el back-end haga trampa y llame a consultas especiales. Creo que este estilo es más consistente.

Mis preguntas:

  • ¿El front-end llama al back-end que llama a la API? ¿O el front-end solo llama a la API en lugar de llamar al back-end?
  • ¿El back-end solo ejecuta una API y la API devuelve el control al back-end (donde el back-end actúa como el controlador final, delegando tareas)?

Se alientan las respuestas largas y detalladas que explican el papel de la API junto con el back-end front-end. Si la respuesta depende del modelo de programación (modelos que no sean el patrón Modelo-Vista-Controlador), describa estas otras formas de pensar en la API. Gracias. Estoy muy confundido.

Jason
fuente

Respuestas:

25

Creo que está confundido por la forma en que el término API está siendo mal utilizado y abusado por muchos desarrolladores web.

  • API significa interfaz de programación de aplicaciones, es decir, cualquier interfaz especificada oficialmente entre diferentes sistemas (o partes del mismo sistema).
  • Hace algún tiempo, se convirtió en algo importante para el inicio web ofrecer acceso público a algunos de sus datos internos a través de una API de servicio web, que generalmente usa REST y JSON, lo que permite a los desarrolladores externos integrarse con sus sistemas. Los desarrolladores web comenzaron a usar el término "API" para referirse específicamente (y solo) a un "servicio web accesible al público", y utilizarlo incorrectamente para incluir su implementación.
  • En términos de frontend y backend, esta API de servicio web (y su implementación) es el backend . Algunas partes pueden ser de acceso público y otras solo para su interfaz.
  • Un nombre diferente para esto es "capa de servicio", es decir, código que
    • representa los servicios que la interfaz llama
    • no contiene lógica de visualización (ese es el trabajo de la interfaz, después de todo)
    • es más abstracto y de grano grueso que las acciones CRUD simples (una llamada de servicio a menudo implicará múltiples acciones CRUD y debe ejecutarse dentro de una transacción de base de datos).
    • contiene la lógica de negocios de la aplicación
Michael Borgwardt
fuente
Tengo una pregunta realmente tonta. ¿Es esta la esencia de la Arquitectura Orientada a Servicios?
Johnny
@johnny: no - SOA es un concepto en un nivel de abstracción mucho más alto, se trata más de cómo organizar la funcionalidad de su negocio que de las capas técnicas.
Michael Borgwardt
Sin embargo, no lo llamaría mal uso. Quizás "cambio de marca"? Es lo mismo con "MVC", que está en el contexto del desarrollo web, algo completamente diferente que en tiempos de PARC cuando se acuñó el término.
Thomas Junk
9

Esbocemos la arquitectura de un sitio web "típico", con un "front-end" y un "back-end". Y como es un sitio web, también tendremos un "cliente" explícitamente. (Dado que no hay forma de que JavaScript en un navegador llame a MySQL en un servidor directamente).

Para mayor claridad, los términos que estamos usando son:

  • Cliente : el navegador compatible con HTML5, especialmente. el DOM y el JavaScript allí cargados para manipularlo.
  • Front-End : el servidor PHP al que apunta el DOM, que contiene tanto la página individual solicitada como algunos puntos de acceso XML o JSON de estilo AJAX.
  • Back-end : un servidor de base de datos, donde se ejecuta MySQL.

Para un programa diseñado adecuadamente, cada uno de estos componentes tiene una API privada para comunicarse con los demás. El código PHP "front-end" no emite SELECTsentencias SQL arbitrarias directamente, sino que llama a procedimientos almacenados, SQL preautorizado o incluso llamadas PHP distintas a una instancia completamente diferente de PHP que se ejecuta en el servidor back-end . Estos procedimientos almacenados o llamadas HTTP distintas son en sí mismas una API.

La definición no cambia incluso si permitimos cierta impureza de nuestro diseño. Si su PHParchivo escribe y envía una cadena SQL directamente a MySQL, TODAVÍA ES UNA API , aunque es muy inusual y es poco probable que repita.

Tenga en cuenta que es completamente posible que su php front-end sea estrictamente sincrónico, sin ningún tipo de vudú AJAX. Si llama a las mismas funciones externas de PHP en dicho archivo síncrono, podría considerar que usan la misma API que la versión del lado del cliente, aunque el uso del término "API" aquí puede no dar ninguna claridad real.

Una API como interfaz de programación de aplicaciones , después de todo, y realmente se refiere a cada vez que un programa llama fuera de su propio proceso. Si está escribiendo un proyecto que tiene tanto un front-end como un back-end, ya sean AJAX / PHP / MySQL como los anteriores o MS Access / SQL Server, vale la pena especificar explícitamente cómo se llamarán entre sí, si no por otra razón que no sea para saber dónde buscar cuando algo se rompe.

(Y el tema de la API pública es algo completamente distinto. En nuestro ejemplo anterior, solo la URL que se muestra en el cliente es una "API pública". Todo lo demás es, en esencia, "privado". Como en, no esperes cualquier código fuera de su control para llamar a su API interna, y usted niega dichos resultados directamente o se reserva el derecho de hacerlo en el futuro.

DougM
fuente
3
En realidad, el frontend es el código del lado del cliente (HTML, Javascript) y el backend es el código del servidor (PHP, Python, Ruby).
Pithikos
-3

una API maneja solicitudes http como GET, POST, FETCH, DELETE ... que se pueden usar dependiendo de su acceso a token para recuperar datos en formatos específicos como json, xml, etc.

Estos "datos" se pueden utilizar en su propia aplicación para obtener API (interfaz de programación de aplicaciones), que es un servicio web accesible al público para recopilar datos que pueden ser interesantes para alguna audiencia.

Estos datos pueden devolver un conjunto de datos que representan un error o recuperar datos de su servidor API

API está destinado a ser back-end para que pueda usarse en cualquier entorno de front-end. Esto significa que se puede usar en una aplicación web, android, ios ... que puede manejar solicitudes https

Balibrera
fuente