RESTFUL - Tensho97/Aprende-a-Aprender GitHub Wiki
Los servicios restful proporcionan una interfaz para conectar varios sistemas basados en el protocolo HTTP permitiendo obtener y generar datos y operaciones. Estos datos son devueltos en formatos muy específicos, como XML Y JSON.
En una aplicación RESTful la comunicación entre dispositivos se define en base a los principios arquitectónicos que estable REST. Basicamente, REST nos indica como debe comunicarse una cliente con un servidor, especificando cosas como:
- Las operaciones a realizar
- La Estructura de la URI
- Tratamiendo de errores
- El formato de los datos
- El estado de la aplicación
- Cache
- Entre otros (paginación, etc).
A continuación se exponen los 4 principales métodos HTTP.
Método HTTP | Descripción | Metodo CRUD | Metodo SQL |
---|---|---|---|
GET | Lectura de datos del servidor | Read | SELECT |
POST | Añadir datos al servidor | Crear | INSERT |
PUT | Actualizar datos del servidor | Update | UPDATE |
DELETE | Eliminar datos del servidor | Delete | DELETE |
REST no nos dice exactamente como deben ser las URI sino que nos dice las características que deben seguir dichas URI.
Entre las características que deben tener las URI tenemos las siguientes:
- La URI no debe contener la acción, es decir no deberia haber verbos en la URI como borrar, copiar , imprimir, cerrar, etc. Estos ya son indicados como operaciones de HTTP.
- La URI no debe contener el formato de los datos que solicitamos. Para indicar el tipo de formato que queremos que nos envie el servidor tendremos la cabecera Accept.
- La propia URI hace referencia al recurso sin necesidad de parámetros. Por ejemplo si queremos el libro con idLibro=5, la URI no debe ser /api/libros?idLibro=5 sino que lo correcto es /api/libros/5.
- Las URI pueden seguir una jerarquia, por ejemplo /api/libros/5/autor/2. Es decir queremos el autor con id=2 del libro número 5.
- Para las búsquedas o filtrado si que se permiten los parámetros.
La gestión de errores se realiza siguiendo los códigos de estado de HTTP. Estas frases están destinadas a dar una descripción intuitiva del estatus.
El primer dígito del código de respuesta especifica una de las cinco clases de respuesta. Como ejemplo tenemos los siguientes:
- 1xx: Respuestas informativas
- 2xx: Peticiones correctas
- 200 OK
- 201 Created
- 204 No Content
- 3xx: Redirecciones
- 4xx: Errores del cliente
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 418 I'm a teapot
- 5xx: Errores de servidor
- 500 Internal Server Error
REST no dice nada sobre que datos retornar cuando hay algún problema como es en el caso del 400 Bad Request y 500 Internal Server Error. Sin embargo, hay que tener cuidado con el contenido devuelto, dado que devolver un texto plano con la traza de una excepción podria ser un importante fallo de seguridad.
Para indicar el formato en el que queremos que nos retornen los datos nos apoyamos en las cabeceras de la petición http. Ejemplo: Content-Type: application/json.
- En la petición:
- Accept : Para indicar el formato de los datos que queremos que nos retorne el servidor
- ContentType : Para indicar el formato de los datos que le estamos enviando.
- En la respuesta:
- ContentType : Para indicar el formato de los datos que se está devolviendo.
Como caracteristica principal, en una aplicación RESTful nunca hay estado en el servidor para un cliente. Esto supone que cada petición debe ser independiente de las demas y nunca guardar nada en la sesión del servidor.
Al ser una petición REST como cualquier otra petición a una página web deberíamos tener en cuenta que las peticiones se pueden cachear en el navegador o en cualquier otro punto de la red. Por ello en general es adecuado indicar desde el servidor si la respuesta puede ser o no cacheada.
REST, es una arquitectura para aplicaciones en red similar a SOAP o XML-RPC pero se diferencia de ellos en su sencillez y que utiliza todas las características que puede de de HTTP en vez de reinventarse lo que ya tiene HTTP. Por ello es importante conocer los datos que enviamos y recibimos por HTTP.
Los datos que se envían es una petición HTTP son:
- La URI del recurso que se pide.
- El método HTTP. ej. GET/POST/PUT/DELETE
- Las cabeceras HTTP. Permiten al cliente y al servidor enviar información adicional junto a una petición o respuesta.
- El cuerpo de la petición con los datos del usuario. Por ejemplo datos en formato JSON o datos en formato XML.
Los datos que se reciben en una petición HTTP son:
- El código de estado
- Las cabeceras HTTP de respuesta.
- El cuerpo de la respuesta con los datos para el usuario. Por ejemplo la página HTML, datos en formato JSON o datos en formato XML.
Ejemplo de una respuesta en formato .json:
{
"id": 1001,
"category": {
"id": 10,
"name": "Cat"
},
"name": "Moggy",
"photoUrls": ["http:\/\/something.com\/images?q=tbn:XmoggyJjB2XhAqq97VzJP"],
"tags": [{
"id": 11,
"name": "Moggy"
}],
"status": "pending"
}
Autor : Julián y Richard