¿El mejor método de comunicación entre su aplicación y su sitio web? PHP, servicio web, etc.

8

Estoy creando una aplicación que me gustaría comunicar con mi sitio web. La aplicación tendrá que obtener datos de un usuario de la aplicación en particular de la base de datos del sitio web. No tengo claro cuál es la mejor manera de hacer esto.

He visto una forma de hacer esto, por ejemplo, creando una página de inicio de sesión en la aplicación que luego golpea una lógica login.php en mi sitio web. Esto es conveniente porque puedo usar una base de código para manejar el inicio de sesión tanto para el sitio web como para la aplicación.

Otra solución que he visto es usar solicitudes JSON para manejar la comunicación entre la aplicación y el sitio web. Esto es conveniente porque los objetos JSON son fáciles de crear y analizar.

Básicamente, me gustaría saber la mejor / común forma de hacer que se produzca esta comunicación, cuáles son los pros y los contras de tener uno sobre el otro, y cualquier otro problema de seguridad a considerar.

Por ejemplo, ¿existe el riesgo de exponer datos confidenciales del usuario cuando se usa un método sobre el otro? Si es así, ¿cómo se puede prevenir? ¿Cómo y dónde entra en juego el cifrado y las validaciones de usuario?

edc598
fuente
La forma común es crear una API. Vea los ejemplos de API de Google o de cualquier otra gran empresa para tener una idea de cómo se hacen.
Arseni Mourzenko
No existe un método único 'mejor', 'talla única'. En lugar de decirnos las opciones que ha visto, mejor defina para nosotros las necesidades específicas de su aplicación. Sospecho que cuando te enfocas en eso, encontrarás tu decisión mucho más fácil de tomar.
GrandmasterB
En el nivel más básico, necesito una forma para que la aplicación móvil obtenga información de la base de datos de mi sitio web. El usuario tendrá varios bits de datos, como diferentes tipos de transacciones, por ejemplo. Quiero poder mostrarle a mi usuario en la aplicación todas las transacciones que realizó durante el mes pasado. Necesito hacer una consulta en mi base de datos para eso. Ya me estoy inclinando más hacia PHP porque puedo mantener una base de código para esta funcionalidad básica. ¿Pero hay un método mejor y más seguro para hacer esto? ¿Hay alguna trampa / peligro obvio que estoy pasando por alto?
edc598
2
@ edc598: No agregue comentarios a su pregunta. Para aclarar una pregunta, es mejor actualizar la pregunta para que sea completa y consistente.
S.Lott

Respuestas:

6

Recomendaría crear una API REST para su aplicación y su sitio web.

Construir un servicio web es más trabajo, pero creo que es mucho más limpio. Si lo hace de esta manera, ni su sitio web ni su aplicación tienen que preocuparse por cómo conectarse y consultar la base de datos, ya que todos esos detalles serán resumidos por la API. Además, otro beneficio es la seguridad: si su sitio web alguna vez es pirateado, no necesariamente tendrán acceso a su base de datos, ya que el sitio web solo está haciendo llamadas API (y no llamadas a la base de datos). Por supuesto, hay muchas cosas a considerar con seguridad, pero eso es algo menos de lo que debe preocuparse.

Aquí hay una gran guía de inicio sobre cómo crear una API REST en PHP:

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

ChezMix
fuente
Me gustó mucho esta respuesta, ya que incluía un enlace útil. Aunque la respuesta de todos ha proporcionado una gran cantidad de información sobre el tema. ¡Gracias!
edc598
link is dead ...
cozyconemotel
1

Dependiendo de la complejidad de sus requisitos, los servicios web REST / JSON o SOAP.

Para requisitos simples, REST es más fácil de entender e implementar, especialmente si prefiere JSON sobre XML.

Sin embargo, si sus requisitos incluyen autenticación, verificación de mensajes, descubrimiento, no repudio o esquema de mensaje complejo, puede ser mejor sumergirse en las complejidades de SOAP, ya que casi todos los problemas están cubiertos. Aunque SOAP es más complejo y más difícil de entender, trata con casi todas las permutaciones y variaciones arquitectónicas posibles en un sistema de mensajería, además, tiene un conjunto de herramientas muy maduro e integral para ayudarlo a través del laberinto de API. Pero si no necesita este nivel de sofisticación, quédese con REST.

James Anderson
fuente
0

La mayor desventaja de una API es que usted tiene la responsabilidad de hacer solicitudes JSON, convertir las respuestas y mostrarlas en la página bajo la responsabilidad del navegador. No todos los navegadores pueden hacer esto, ya sea intrínsecamente o porque los usuarios han desactivado java-script.

Sin embargo, estas preocupaciones han ido disminuyendo con el tiempo y ahora afectan a relativamente pocos clientes. Sin embargo, podría valer la pena hacer un trabajo extra para apoyar a todos los clientes.

Las ventajas de una API son que es mucho más fácil separar la lógica de la API de los detalles de la pantalla y es más fácil acceder directamente a la API por otro medio que no sea un navegador (como desde otra aplicación). Esto automáticamente hace que la prueba de la API sea separada de la prueba del cliente, lo cual es bueno.

También es algo más seguro contra los ataques de inyección de página (como los ataques de secuencias de comandos de sitios cruzados) porque es más fácil analizar y escapar correctamente de JSON que para un documento HTML (que podría incluir etiquetas de script que contengan java-script). Esto supone que en el cliente analiza JSON con un analizador JSON y no solo usa alguna forma de eval (), que no es del todo segura.

Otra posible ventaja es que puede eliminar la capa "marco web". En lugar de ASP, JSP, Django, Zend o lo que sea, realmente solo necesita una capa delgada para retransmitir JSON de un lado a otro de su cliente a su servidor. Entonces, como mínimo, podría transportar esa pieza entre marcos de una manera trivialmente fácil si lo desea. Eso puede eliminar una gran parte móvil de su aplicación.

Creo que el cifrado y la validación funcionan básicamente de la misma manera. Creo que si tiene una API, es más probable que recuerde no confiar en el cliente que si tiene una página web, ya que es posible olvidar que los atacantes no necesitan usar un navegador como cliente, pero pueden enviarle cualquier encabezado. , consultar parámetros y publicar datos que deseen. Sin embargo, esto es más un problema psicológico que técnico, y podría no aplicarse a usted.

psr
fuente
1
Gracias por su respuesta, está muy bien pensado. Estoy buscando simplemente apoyar mi propia aplicación aunque. Pensé que tal vez crear diferentes métodos en PHP que ejecuten diferentes consultas para datos de usuario es una buena idea. ¿Qué piensa usted acerca de esta idea? ¿Cómo puedo asegurar la comunicación entre mis scripts PHP y mi aplicación? ¿Puedo usar https? ¿Hay algo que estoy pasando por alto? ¿Quizás un método más fácil de consultar estos datos?
edc598
Todo lo que dije, excepto una cosa, se aplica solo a apoyar tu propia aplicación. HTTPS es una pregunta separada, pero ayudará a asegurar la comunicación pero no evitará las secuencias de comandos o ataques entre sitios de su propio cliente. Realmente no sé cuáles son las últimas 2 preguntas aquí.
psr