Web services y PHP

comx

Llevo casi 1 año programando en Back End con Symfony2 y me gustaría mejorar mis conocimientos. En varias entrevistas de trabajo se me ha hecho la siguiente pregunta: ¿Has programado servicios en Symfony? Y ya va siendo hora de aprender para qué sirve y ponerlo en práctica.

Así que, ¿podríais ponerme un ejemplo práctico? En qué casos lo utilizais/utilizaríais? :o_o:

MTX_Anubis

Una web podría definirse como web service xD.

Simplificandolo yo lo veo como servicios que ofrece tu servidor (por ejemplo, un API para que la consuma una aplicación móvil o lo que sea sería un subconjunto dentro de los web services, en concreto de los RESTful web services)

Pero comunmente cuando se habla de web services se suele referir a un SOA donde el concepto de aplicación se suele difuminar y pasa a ser un conjunto de servicios que interoperan entre ellos con SOAP de por medio, un horror vamos.

Vamos en sí, engloba bastante más porque deberían poder ofrecer una validación de los mensajes que se intercambian mediante la definición de sus interfaces, seguridad, etc.

Y

Yo creo que un web service es la comunicación de tu web de symfony por ejemplo con otra de codeigniter, ambos en diferentes servidores y usando diferente bd. Así puedes guardar datos de una web a otra. Un ejemplo un tanto malicioso que es ilegal o igual no, sería, imagina que todos los usuarios de tu web aceptan su conformidad para hacer lo que quieras con sus datos. Puedes por medio de un webservice pasar la información de tu bd a otra, al guardar en tu bd le dices que construya un xml y por medio de curl los pase a otro servidor por ejemplo de google, por cada registro google te paga 1céntimo. Así no necesitas pasarle a google ni usuario, ni contraseña de la web ni de bd, ni backups ni nada, automáticamente la información viaja de la web a la bd de google. Es un ejemplo un tanto raro pero esa es la finalidad, pasar datos de una web a otra.

1 respuesta
KoRMuZ

Los servicios de Symfony no tienen por qué tener nada que ver con los webservices.

Un webservice, normalmente, es para hacer algún tipo de extracción/inserción de datos a modo de API, ya sea para una aplicación, o porque quieres acceder a algo desde otra web.

Los servicios de Symfony no son más que controladores que declaras de determinada forma para que sean accesibles desde toda la aplicación.

Imagina que tienes un controlador para enviar mails, pues declaras el servicio 'acme.mail' y despues con un:

$this->get('acme.mail')->sendTheBestMailEverAction($user)

por ejemplo, estás llamando desde el controlador principal, o desde el de registro, a la función que se dedica a enviar los mails.

Así que, a qué te refieres de las dos cosas #1 ? xD

4 3 respuestas
Fyn4r

#3 que? xd

sasher

Un web service no es ni mas ni menos que un SaaS. El como lo implementes no importa mientras siga sus principios.

comx

#4 Mi pregunta era más genérica aunque mis ideas se están aclarando un poco. Ahora tengo que pensar alguna chorrada que pueda programar y ver realmente qué utilidad tiene.

2 respuestas
TeNSHi

#7 Yo todavía no soy muy pr0 con symfony aunque voy haciendo mis cosas. La explicación de #4 es bastante buena aunque los servicios no tienen porque ser controladores, es mas, la mayoría de las veces no lo son aunque se puedan declarar como servicios (hay opiniones encontradas en contra y a favor de declararlos como servicios).

Tu puedes definir servicios a partir de cualquier clase (creo que seria mas correcto que decir controlador), puedes hacer por ejemplo una o varias funciones que usas mucho en otras partes de tu proyecto, controladores, formularios, etc y parte de la gracia estaría en que teniendo acceso al contenedor de servicios (si no recuerdo mal poniendo en consola php app/console container:debug ves todos los servicios disponibles) puedes hacer uso de esa función sin falta de tener que importar la clase en tu fichero y con una simple linea (al menos en controladores porque ya tienen acceso directo al contenedor de servicios).

Ademas a estos servicios le puedes inyectar otros servicios/dependencias, por ejemplo imaginate que quieres un servicio que tenga que hacer consultas en la base de datos, pues cuando declaras el servicios en el fichero que hay para ello (services.yml) le inyectas por ejemplo el entity manager de doctrine. Incluso las extensiones de twig se pueden declarar como servicios.

Yo si veo que una función o utilidad la voy a utilizar mas de una vez suelo meterlo en un servicio, de hecho hay un paradigma de programación que es orientado a servicios y si no recuerdo mal el propio framework tira de el.

Si te lees este apartado puede que te quede mas claro:

http://librosweb.es/libro/symfony_2_x/capitulo_16.html

1 respuesta
KoRMuZ

#8 Sí, pero lo que quería era hacer visible la diferencia entre Webservice y servicio en symfony, para no extenderlo.

#7 si lo que quieres es hacer un servicio para probar, prueba con uno como te he dicho de mail. Cuando hagas determinada acción en la plataforma, llamas a ese servicio y que te envíe un mail diciendote "has hecho nosequé". Es la forma más simple bajo mi punto de vista

Gantorys

Cuando te preguntan "servicios en symfony" entiendo que se refieren a clases que creas y que las vas "inyectando" en los controladores donde las utilices (lo que dice #4 vamos)

Un Web Service yo lo entiendo como una API Web, por ejemplo una petición HTTP GET a una url que devuelva unos datos en JSON y la respuesta la manejas como quieras en la aplicación desde donde utilizas el Web Service.

1
Wasd

#1 Antes tendrás que decirnos si estás hablando de peras o de mandarinas.

En el titulo del thread preguntas por Web services pero en la descripcion hablas de los servicios de symfony 2. Son contextos distintos y por lo tanto tienen definiciones distintas.

Ambas te las han descrito los compañeros de arriba. No le veo mucho sentido a que en una entrevista te pregunten si has "programado servicios en symfony". Los servicios de symfony son una herramienta mas, de tantas que tiene. Que te pregunten si has desarrollado una API en symfony tiene mas sentido, ya que eso engloba el uso del framework en general (servicios, enrutamiento, traducciones, eventos, etc...).

Puedes por ejemplo hacer un portal web que tenga un buen componente AJAX, y utilizar servicios de symfony reutilizables para responder a los GET/POST que hagas. Con eso tienes cubierto tanto las peras como las mandarinas.

Un saludo.

14 días después
Makalister

La filosifia de symfony 2 debe ser controladores ligeros y muchos servicios (para su posible reutilización)

comx

Perdonan la tardanza. Llevo varias semanas metido de lleno en mi proyecto final de grado y voy un tanto liado. (A su vez soy Erasmus, imaginaros el panorama)

Vale, tenía un poco de lio entre servicios php y servicios symfony. Gracias a todos vosotros ahora mis ideas se han aclarado un poco.

De todas formas, e aquí un pequeño proyecto que hice hace un tiempo. Basándome en este proyecto por ejemplo un posible servicio sería crear un API para que cualquiera pueda usar mi proyecto devolviendo como resultado JSON, no?

Enlace al proyecto: Slink

Usuarios habituales