Materia
Desarrollo Web con Software Libre
Docente
Ing. Rafael Leonardo Jiménez Álvarez
Tema
Servicios Web RESTful
Estudiantes
Ronald Fernando Gómez Trejo
Mauricio Alfredo Orellana Orellana
Carlos José Hernández Dueñas
Fecha de entrega
10/11/2021
Contenido
Objetivos............................................................................................................................................3
¿Qué es un servicio web?...................................................................................................................4
Los componentes clave de los servicios web incluyen:..................................................................4
Principios de funcionamiento de los servicios web........................................................................4
Tipos de servicios web...................................................................................................................5
Un breve repaso sobre SOAP.....................................................................................................5
¿Qué es REST?....................................................................................................................................6
Definiendo Servicios Web RESTful.....................................................................................................6
Características principales de un servicio Web RESTful..................................................................6
Operaciones RESTful......................................................................................................................6
REST API's...........................................................................................................................................7
Algunas características de una API REST........................................................................................7
Buenas practicas............................................................................................................................7
RESTful en Symfony............................................................................................................................9
Objetivos
Presentar de manera concisa los aspectos mas relevantes acerca de los servicios web
RESTful.
Explicar algunas de las mejores prácticas para la creación de REST API’s.
Mostrar los pasos para la creación de una REST API.
¿Qué es un servicio web?
Un web service es una vía de intercomunicación e interoperabilidad entre máquinas
conectadas en Red. En el mundo de Internet se han popularizado enormemente, ya se trate
de web services públicos o privados. Generalmente, la interacción se basa en el envío de
solicitudes y respuestas entre un cliente y un servidor, que incluyen datos. El cliente solicita
información, enviando a veces datos al servidor para que pueda procesar su solicitud. El
servidor genera una respuesta que envía de vuelta al cliente, adjuntando otra serie de datos
que forman parte de esa respuesta. Por tanto, podemos entender un servicio web como un
tráfico de mensajes entre dos máquinas. Asimismo, ayudan a mejorar la flexibilidad de los
procesos empresariales mediante la integración con aplicaciones que, de lo contrario, no se
comunican.
Los servicios web reflejan el enfoque de arquitectura orientada a servicios (SOA) para la
programación. Este enfoque se basa en la idea de crear aplicaciones mediante el
descubrimiento y la implementación de servicios de red disponibles, o invocando las
aplicaciones disponibles para llevar a cabo una tarea. Los servicios web ofrecen inter-
operatividad, por ejemplo, las aplicaciones de servicios web proporcionan componentes
creados en distintos lenguajes de programación para trabajar juntos como si se crearan
utilizando el mismo idioma. Los servicios web se basan en tecnologías de transporte
existentes, como por ejemplo HTTP, y técnicas de codificación de datos estándar, como
XML (Extensible Markup Language), para invocar la implementación.
Los componentes clave de los servicios web incluyen:
Lenguaje de descripción de servicios web (WSDL)
WSDL es el archivo basado en XML que describe el servicio web. La solicitud de
servicio web utiliza este archivo para enlazar con el servicio.
SOAP
SOAP es el protocolo basado en XML que la solicitud de servicio web utiliza para
invocar el servicio.
Principios de funcionamiento de los servicios web
Al hablar de lo que son los servicios web, es necesario tener presentes sus condiciones de
funcionamiento. Lo que permitirá comprender el funcionamiento del sistema.
El cliente realizará una serie de llamadas a un servicio web haciendo peticiones al
servidor que alojará el servicio web real.
Estas solicitudes se ejecutan a través de las llamadas a procedimientos remotos.
Estas llamadas a procedimientos remotos (RPC) son aquellas que se hacen en la
solicitud correspondiente.
Un ejemplo de servicio web sería Amazon. La organización cuenta con una red de tiendas
online y sistemas de entrega. Proporciona un servicio web que solicita los precios de los
productos vendidos en línea a través de amazon.com. El front-end o capa de presentación
puede estar en .Net o Java, pero cualquier lenguaje de programación interactúa con el
servicio web a su manera. Tiene lugar en una plataforma común.
Tipos de servicios web
Fundamentalmente hay dos tipos de servicios web:
SOAP
RESTful
Para que un entorno desarrollado sea totalmente funcional, deben estar presentes ciertos
componentes. Estos componentes deben estar presentes independientemente del lenguaje de
desarrollo que se utilice para programar una determinada solicitud. Es posible crear un
servicio web por sí mismo. Para ello, hay que crear un portal para alojarlo e instalar un
entorno de programación que funcione.
Un breve repaso sobre SOAP
La primera introducción de los web services en el mundo de Internet vino de la mano de
SOAP. SOAP es un protocolo que define cómo deben de realizarse las comunicaciones
entre máquinas. SOAP usa XML como lenguaje de intercambio de datos con una estructura
compleja que es capaz de albergar todo tipo de datos sobre la solicitud o respuesta
generada.
Es usado para implementar servicios web dentro de una SOA (arquitectura orientada a
servicios). El SOAP se transporta principalmente a través de HTTP y sistemas de
mensajería middleware (JMS, MQ Series, MSMQ, Tuxedo, TIBCO RV), pero también se
puede ser transportar a través de otros protocolos como SMTP (protocolo para transferencia
simple de correo) y FTP (protocolo de transferencia de archivos).
Los mensajes SOAP suelen incluir los siguientes elementos:
El sobre: el sobre SOAP es el elemento raíz de un mensaje SOAP y es necesario. En
esencia, el sobre contiene el mensaje SOAP igual que un sobre tradicional contiene
una carta escrita.
Encabezado: el encabezado SOAP es opcional y, cuando está presente, contiene
información específica de la aplicación como los detalles de autenticación,
direccionamiento y enrutamiento.
Cuerpo: el cuerpo SOAP es necesario y contiene el mensaje de la aplicación que se
está transportando, incluidos la operación remota específica que se invoca y los
datos (parámetros) que se intercambian.
¿Qué es REST?
REST es la abreviatura de REPRESENTATIONAL STATE TRANSFER, es una interfaz
para conectar varios sistemas basados en el protocolo HTTP y sirve para obtener y generar
datos y operaciones, devolviendo esos datos en formatos muy específicos, como XML y
JSON.
REST se caracteriza por no tener estado. Es decir, el servidor no es capaz de recordar el
estado de la anterior solicitud REST que pudo, o no, hacer un cliente. Por ello, el cliente
tiene que enviar en cada solicitud todo el estado de su sesión, lo que se suele hacer
mediante un token que le ayude a recordar al servidor.
Mencionamos esas dos características porque es justamente lo permite que la
implementación de REST sea realmente fácil y se haya popularizado tanto el tipo de
servicio web que se conoce como el nombre de API REST.
REST tiende a simplificar las cosas y en esa misma línea se suele usar un lenguaje diferente
para representación de los datos, el lenguaje JSON. Hoy REST y JSON se han convertido
en la opción más sencilla y por tanto más recomendable para implementar un servicio web.
Definiendo Servicios Web RESTful
Tanto el concepto de Servicio Web y el de REST son clave ya que un servicio Web
RESTful es aquel servicio web que está basado en la arquitectura REST. Los servicios Web
RESTful se basan en recursos. Un recurso es una entidad, la cual se almacena
principalmente en un servidor y el cliente solicita el recurso utilizando servicios Web
RESTful.
Características principales de un servicio Web RESTful
Tiene cinco operaciones típicas: listar, crear, leer, actualizar y borrar
Cada operación requiere de dos cosas: El método URI y HTTP
El URI es un sustantivo que contiene el nombre del recurso
El método HTTP es un verbo
Operaciones RESTful
Operación Método URI Parámetros Resultado
HTTP
Listar GET /{recurso} No aplica
Lista del tipo de
recurso
Crear POST /{recurso} Dentro del Se crea un nuevo
cuerpo en el recurso
POST
Leer GET /{recurso}/{recurso_id} No aplica Recurso en función
del id
Actualizar PUT/PATC /{recurso}/{recurso_id} Se pasan Se
H usando una actualiza/reemplaza
cadena de el recurso
consulta
Borrar DELETE /{recurso}/{recurso_id} No aplica Se elimina el
recurso en función
al id
REST API's
La palabra API viene de Application Programming Interface, y no es más que un programa
que permite que otros programas se comuniquen con un programa en específico, por
ejemplo, Facebook. A diferencia de los web services, las API no necesariamente deben
comunicarse entre una red, pueden usarse entre dos aplicaciones en una misma
computadora.
Algunas características de una API REST
El uso de hipermedios (procedimientos para crear contenidos que contengan texto,
imagen, vídeo, audio y otros métodos de información) para permitir al usuario
navegar por los distintos recursos de una API REST a través de enlaces HTML
(principio HATEOAS, Hypermedia as the engine of application state o hipermedia
como el motor del estado de la aplicación).
Independencia de lenguajes. La separación en capas de la API permite que el
cliente se despreocupe del lenguaje en que esté implementado el servidor. Basta a
ambos con saber que las respuestas se recibirán en el lenguaje de intercambio usado
(que será XML o JSON).
Los recursos en una API REST se identifican por medio de URI. Será esa
misma URI la que permitirá acceder al recurso o realizar cualquier operación de
modificación sobre el mismo.
Las APIs deben manejar cualquier error que se produzca, devolviendo la
información de error adecuada al cliente. Por ejemplo, en el caso de que se haga una
petición GET sobre un recurso inexistente, la API devolvería un código de error
HTTP 404.
Buenas practicas
Información básica
La información básica que define un swagger se compone de los siguientes apartados:
Versión del lenguaje
Información general de la interfaz
Tipo de Licencia
Nombre del Host
Protocolos de transporte válidos
Seguridad
Esta información se utiliza como documentación y no es crítica en la generación de un
cliente para consumir las operaciones descritas en el contrato.
Operaciones
Las operaciones de un contrato para una API representan como va a interactuar el cliente
con las entidades (información) gestionada por la API.
Las operaciones en una API se describen mediante "verbos". Los operaciones que
describen una API se pueden clasificar en los siguientes grupos:
Operaciones seguras: Obtener información de las entidades.
Operaciones de modificación: Necesitan un payload con la información a crear o
modificar en el servidor.
Operaciones de información: Obtener información del backend.
Parámetros
Las operaciones que se describen en un contrato requieren de información variable para
acceder a la información. Esta información puede ser:
Parámetros de navegación (Path Parameters)
Parámetros de filtrado (Query Parameters)
Payload de información (Payload)
Para describir esta información se recomienda documentar la siguiente información:
Tipo de Objeto (Ej. String)
Tamaño máximo
Obligatoriedad (Mandatory)
Expresión regular que define el formato (Ej. Formato de un correo electrónico)
Lista de valores válidos (Ej. Listado de Provincias)
Esquema del objeto
Formato del mensaje (Ej. application/json)
Códigos de respuesta
Cuando hablamos de una API REST las respuestas deben estar basadas en un código
HTTP que identifique de forma unívoca la operación.
Adicionalmente el equipo de desarrollo del backend debe tener en cuenta que las
operaciones deben ser implementadas desde un punto de vista de inmutabilidad, es decir
para una misma operación debe devolver el mismo código HTTP si se ejecuta con éxito.
Buenas prácticas de diseño
Adicionalmente, aunque la API tenga una validación de 100 puntos, es recomendable tener
en cuenta las siguientes buenas prácticas:
1 - Una entidad en una API no debe representar una tabla en el modelo Entidad-Relación
2 - No proporcionar información sensible (Ej. Hashcode de una password)
3 - No utilizar "Primary Keys" o "Foreign Keys" como parámetros (Path parameters)
4 - Una API REST representa Entidades y no Acciones
5 - Las operaciones de una API REST no deben tener estado (deben ser idempotentes)
6 - Las operaciones que requieran una complejidad alta en el servidor se deben gestionar de
forma Asíncrona.
7 - Utilizar cabeceras para validar el formato de la información mediante cabeceras (Ej.
Content-Type)
RESTful en Symfony