Tengo diferentes preguntas sobre una idea de arquitectura completa. Espero que alguien con gran experiencia pueda ayudarme porque me estoy quedando atrapado en todas las posibilidades.API como núcleo para un sitio web y una aplicación móvil
Estoy planeando reescribir un sitio web de la comunidad. Nuestro cliente quiere hacer uso de aplicaciones móviles nativas en el futuro. Por lo tanto, tendré que tener esto en cuenta. Debido a esto, he decidido crear una arquitectura de API REST 100% basada en el framework PHP Kohana. He elegido Kohana porque esto hace que escalar la API interna a otro servidor muy fácilmente sin mucho esfuerzo adicional. (Kohana amenaza las solicitudes de URL internas no como HTTP, por lo que no hay demasiados gastos generales al principio y puede escalar a HTTP con algunos cambios de código menores).
Al principio, la API será privada, pero más adelante podríamos hacerla pública para permitir que más servicios se conecten a nosotros fácilmente.
De estructura básica resto es como sigue:
- /gatos
- /gatos/1
- /gatos/1/encargo
'a medida' se puede 'niño' por ejemplo.
mismo ocurre con:
- /Clasificados
- /ofertas
- /usuarios
- /banners
- etc ..
Estos son perfectos para las entidades de la API porque la aplicación móvil definitivamente usará toda esta funcionalidad.
Así que podemos concluir que el núcleo del sitio web es REST. Así que básicamente quiero hacer que el sitio web sea un cliente de la API al igual que la aplicación nativa en el futuro. De esta forma, el mantenimiento parece mucho más fácil.
Lo que más me preocupa es el hecho de que hay mucho más que esto (gestión de archivos cargados, facturación, automails para facturación, automails para anuncios, etc.). La carga de archivos debe pasar por el sitio web a la API. ¿Es esta práctica común? Si no hago esto, el sitio web cargaría la lógica, lo que hace que el sitio ya no sea cliente y la aplicación misma. Por lo tanto, la aplicación móvil no puede cargarse y tanto la API como el sitio web deben conocer la carpeta de carga (lógica duplicada).
pensé en la creación de los siguientes módulos:
- -api comunidad
- comunidad web
Api parece ser el núcleo a continuación. Pero ... ¿qué hay de los cronjobs, etc.? En realidad, no deberían formar parte del sitio web, ya que este es solo un 'cliente'. Siento que deberían interactuar directamente con el modelo o la API.Así que, básicamente, la API se vuelve más como una puerta de entrada al núcleo y pensé que necesita esta:
- núcleos comunidad
- Modelos
- Cronjobs
- Auto correspondencia (parte de cronjobs)
- Facturas, etc.
- -api comunidad
- Interactuar con los modelos en el núcleo a través de HTTP
- comunidad web
- sitio web
- administración
La tarea programada núcleo s son una excepción a la estructura REST. Ellos son los únicos que pueden cambiar los datos sin pasar por la API. Al menos esa fue mi idea porque pertenecen al núcleo y API está en la parte superior del núcleo.
Pero por diseño eso parece simplemente incorrecto. ¡La manipulación solo debe pasar por la API!
alternativa:
- comunidad-core
- Modelos
- -api comunidad
- Interact con los modelos en el núcleo a través de HTTP
- negocios
- cronjobs
- Auto Mailings (parte de cronjobs)
- Las facturas de la comunidad, etc.
- comunidad web
- sitio web
- administración
Esto se ven mejor por diseño para mí. Mindmap illustration http://mauserrifle.nl/mindmap.jpg
principales cuestiones
1)
caso cronjobs manipular a través de la API o modelos Core?
2)
Mi factura tarea programada necesita una plantilla de más o menos el estilo de la página web principal del curso. Pero si mi cronjob es parte de un negocio o núcleo, no tendrá conocimiento de mi sitio web principal. ¿Qué sentido tiene resolver esto?
3)
Mi sitio web va a utilizar el bigote como un motor de plantillas. (Tanto php como javascript pueden analizar estas plantillas). Pensé en usar la API directamente para las llamadas ajax, pero luego me di cuenta:
El sitio obtiene datos de la API, formatea los sellos de tiempo con las fechas (Y-m-d) para la plantilla y luego los renderiza. Si dejo javascript llamar directamente a la API, JavaScript también debe tener lógica (formateo). Este es un código duplicado! Siente que la única solución es llamar al sitio web para ajax (que llama a la API y a los formatos) y devuelve el json formateado. ¿Estoy en lo cierto?
Pero .... llamadas simples como la eliminación de un anuncio puede ir a través de la API directamente (por ejemplo, suprimir:/Clasificados/1
consigo una mezcla de llamadas ....
Cualquier solución mejor para este
4)
general:? Es mi arquitectura demasiado complejo? ¿Alguna alternativa que deba considerar?
¡Me gustaría escuchar sus comentarios!
Supongo que su última oración es positiva? (¿El hecho de que ya tiene una API pública mediante la construcción de API-Centric?) Gracias por ese artículo, se refiere al blog de Twitter que me inspiró a utilizar esta forma de construcción, así que definitivamente voy a leer esa también y volveré a este tema más tarde :) – mauserrifle
Ok la mayor parte del artículo que ya he implementado (el camino kohana). Tengo un buen presentimiento sobre la creación del sitio web como cliente de la API. Todavía no se sabe dónde poner cronjobs, etc. (que es lógica interna). También tengo que crear un administrador (parte del sitio web) para administrar todas las entidades adicionales, se siente como una sobrecarga de trabajo:/Por otra parte, una vez compilación ... un montón de posibilidades en el futuro. Consejos para eso? – mauserrifle
Ese es exactamente mi punto. Existe la necesidad, en casi el 100% de los casos, de tener características específicas relacionadas con la aplicación, como cronjobs, que realmente no se ajustan a un enfoque centrado en la API. Eso significa que, en mi opinión, debería tener servicios web desacoplados de la aplicación principal, como wsdl. –