Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
code:rest [2011/07/29 08:56] alfred |
code:rest [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 45: | Línea 45: | ||
| ==== Visibilidad ==== | ==== Visibilidad ==== | ||
| + | |||
| Línea 50: | Línea 51: | ||
| ==== Uso de métodos HTTP ==== | ==== Uso de métodos HTTP ==== | ||
| + | ===== Seguridad en REST ===== | ||
| ===== Desarrollo erróneo ===== | ===== Desarrollo erróneo ===== | ||
| + | |||
| + | |||
| ==== Errores comunes ==== | ==== Errores comunes ==== | ||
| + | * **Fuente**: [[http://www.prescod.net/rest/mistakes/]] | ||
| + | Los errores que se llevan a cabo en el desarrollo de servicios REST son: | ||
| + | - No seguir los estándards HTTP. | ||
| + | - Utilizar POST para otros fines que no sea la creación de un nuevo elemento. | ||
| + | - Depender de la estructura del servidor. Las URIs deberían ser configurables. | ||
| + | - Utilizar acciones en las URIs. Por ejemplo "someuri?action=delete" es erróneo. | ||
| + | - Usar sesiones. Las aplicaciones son consumidores de recursos, no servicios. | ||
| + | - No utilizar las URIs correctamente. Para acceder a un recurso haríamos "someuri/resource/322" o utilizaríamos RDF. | ||
| + | - Preocuparse por el protocolo. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| ==== AntiPatrones REST ==== | ==== AntiPatrones REST ==== | ||
| + | * **Fuente**: [[http://www.infoq.com/articles/rest-anti-patterns]] | ||
| + | === Utilizar con exceso GET === | ||
| + | GET debe de traer la representación de un recurso identificado por una URI. \\ | ||
| + | Una URI como la siguiente sería incorrecta: ''<nowiki>http://example.com/some-api?method=deleteCustomer&id=1234</nowiki>'', es posible que sea más fácil de desarrollar y testear, pero en este caso no se está utilizando la URI como un identificador, además el link no puede ser guardado, puede que un robot de búsqueda lo ejecute sin querer... \\ | ||
| + | Un GET no debe modificar. | ||
| + | |||
| + | === Utilizar con exceso POST === | ||
| + | Similar al anterior solo que con el método POST. \\ | ||
| + | GET es para leer, POST para modificar. | ||
| + | |||
| + | === Ignorar la caché === | ||
| + | Utilizar una cabecera como ''Cache-control: no-cache'' evitaría que el navegador insertase en su caché el contenido. A veces esto puede ser útil pero a menudo se le puede sacar partido a la caché del cliente, por ejemplo si un recurso se actualiza cada 30 minutos se puede evitar las peticiones en peridos más cortos. | ||
| + | |||
| + | === Ignorar códigos === | ||
| + | HTTP tiene una serie de códigos internos para lidiar con distintos casos (200: todo ha ido corretamtente, 404: no se encontró el recurso, 500: hubo un error interno...) y que si se utilizan son una herramienta más que correcta para la comunicación cliente-servidor. \\ | ||
| + | Por ejemplo el 201 para cuando se ha creado un recurso, el 409 cuando ha habido un conflicto (por ejemplo de versiones de un recursos), el 412 para indicar que no se reconoce al cliente. | ||
| + | |||
| + | === Usar incorrectamente las cookies === | ||
| + | De la misma forma que las sesiones, el uso de cookies para mantener una conversación con el server; sí que podrían ser usadas para, por ejemplo, guardar un token de autentificación (aunque es preferible utilizar la autentificación HTTP). | ||
| + | |||
| + | === Olvidar la hypermedia === | ||
| + | El concepto de hypermedia corresponde al hecho de linkar elementos entre ellos. Olvidar la hypermedia es no agregar links en las representaciones de los recursos, es importante que los subrecursos sean devueltos como links. | ||
| + | |||
| + | === Ignorar los MIME types === | ||
| + | Puede que un recurso sea devuelto en distintos formatos (XML, JSON, YAML, PDF...), la forma adecuada de devolverlo al cliente es mediante el uso correcto de MIME-TYPES. | ||
| + | |||
| + | === Romper la auto descripción === | ||
| + | Básicamente es seguir los estándards REST. | ||
| ===== Notas ===== | ===== Notas ===== | ||