8.1 Enfoque de API remota

Todos los programadores cometen el mismo error al construir una arquitectura cliente-servidor. Comienzan a tratar las solicitudes al servidor como llamadas a métodos .

Desea iniciar el proceso de generación de informes en el servidor, ¿por qué no enviarle una solicitud como:

http://server.com/startDocumentGeneration?params

¿Y cómo descargar el informe una vez que se completa? Para hacer esto, escribiremos otro método:

http://server.com/getDocument

El servidor almacena HttpSessioninformación sobre nuestro documento, y tan pronto como se genere el documento, el servidor lo devolverá.

Gran enfoque. ¿O no?

El enfoque es realmente terrible. La cosa es que el servidor debe recordar el número de documento. En otras palabras, para procesar correctamente las llamadas a nuevos métodos, el servidor debe recordar los resultados de las llamadas a métodos anteriores.

En la web, esto es un gran problema. Internet puede desaparecer, el navegador puede cerrarse. La página se puede volver a cargar o hacer clic accidentalmente en un enlace, y así sucesivamente. Y el servidor seguirá almacenando megabytes de datos de solicitudes de usuarios anteriores...

Para un trabajo cómodo con el servidor, no puede esperar que siempre tenga a mano los datos de las solicitudes anteriores al servidor.

Entonces, ¿cómo llamar a los métodos del servidor? La respuesta correcta sería terrible: ¡de ninguna manera!

8.2 Enfoque REST

Los programadores volvieron a lo básico y recordaron que inicialmente la solicitud contenía la ruta al archivo en el servidor:

http://server.com/path?params

Y decidimos utilizar este enfoque al máximo.

Ahora el servidor se considera como un repositorio de datos que es visible al exterior en forma de árbol .

Si desea obtener una lista de todos los usuarios, llame a la consulta:

http://server.com/users

Si desea obtener datos sobre el usuario 113, ejecute la consulta:

http://server.com/users/113

Y así sucesivamente, todo en la misma línea.

Una vez más, el servidor se ve como un depósito de datos que es visible desde el exterior en forma de árbol.

Los datos se pueden recibir: solicitudes GET , modificación: solicitud POST y eliminación: solicitud DELETE .

8.3 Sin estado

El protocolo REST de interacción entre el cliente y el servidor requiere la siguiente condición: durante el período entre solicitudes del cliente, no se almacena información sobre el estado del cliente en el servidor.

Todas las solicitudes del cliente deben diseñarse de tal manera que el servidor reciba toda la información que necesita para cumplir con la solicitud cada vez . El estado de la sesión se guarda en el lado del cliente.

Durante el procesamiento de las solicitudes de los clientes, se considera que el cliente se encuentra en un estado de transición. Cada estado de aplicación individual está representado por enlaces que se pueden invocar la próxima vez que el cliente acceda.

8.4 Uniformidad de la interfaz

Todas las rutas utilizadas para recuperar objetos del servidor están estandarizadas. Esto es muy conveniente, especialmente si obtiene datos de otros servidores REST.

Todas las interfaces de objetos deben cumplir con tres condiciones:

Identificación de recursos

Todos los recursos se identifican en las solicitudes mediante un URI. Los recursos dentro del servidor están separados de las vistas que se devuelven a los clientes. Por ejemplo, un servidor puede enviar datos desde una base de datos como HTML, XML o JSON, ninguno de los cuales es un tipo de almacenamiento dentro del servidor.

Manipulación de recursos a través de una vista

Si el cliente almacena una representación del recurso, incluidos los metadatos, entonces tiene suficiente información para modificar o eliminar el recurso en el servidor.

Mensajes "autodescriptivos"

Cada mensaje contiene suficiente información para entender cómo manejarlo. Por ejemplo, si necesita información sobre el usuario, el servidor le devolverá un objeto JSON, donde habrá campos de nombre y dirección.

No debe haber una situación en la que el cliente necesite saber que el primer número en la respuesta es la edad y el segundo es la fecha de nacimiento.

8.5 Almacenamiento en caché

El enfoque REST asume que las solicitudes de datos se realizan a través del protocolo HTTP. Por lo tanto, los objetos se obtienen llamando a una solicitud GET. Esto significa que, como todos los recursos recibidos a través de una solicitud GET, están sujetos a todas las reglas para almacenar en caché los recursos HTTP.

Es decir, los datos recibidos a través de la API REST se almacenan en caché de la misma manera que cualquier recurso estático en los servidores web. Belleza :)