¿El esquema de nombres REST estándar es simplista?

El diseño de recursos en una arquitectura basada en REST requiere una mentalidad completamente diferente a la del diseño de objetos en un lenguaje de programación orientado a objetos. Si bien hay algunos casos extremos que pueden ser difíciles de expresar con los métodos de HTTP dado un recurso con nombre nominal, tampoco es que OOP no tenga desafíos de diseño.

Los ejemplos que menciona son bastante fáciles de resolver con la restricción verbo + sustantivo de HTTP:

Reenviar solicitudes
Si se supone que el reenvío de la solicitud es invisible para el cliente, el servidor puede actuar como un proxy inverso, que es una forma estándar de operación e incluso una de las restricciones definitorias de REST.

Si el cliente necesita saber sobre el reenvío, puede hacerlo con un código de estado 3xx. Las solicitudes seguras, como GET , pueden usar 301 Moved Permanently o 302 Found, mientras que 303 See Other y 307 Temporary Redirect pueden usarse para métodos inseguros y / o no idempotentes como POST .

Eliminar entradas de tabla
DELETE /tables/customers?where=(age < 20 and sex = 'm') es una solicitud HTTP perfectamente válida. Es un patrón bastante común que de alguna manera u otra asigna el contenido de una base de datos a un recurso HTTP. La parte del lenguaje de consulta es un detalle de implementación, para el cual GraphQL, Falcor y OData Query Options son algunas de las muchas soluciones posibles.

Actualizar entradas de tabla
Aquí tienes al menos tres opciones posibles:

  1. PUT /tables/customers/1 reemplazará completamente el recurso del cliente.
  2. PATCH /tables/customers/1 actualizará parcialmente el recurso del cliente. Consulte el parche JSON para ver ejemplos de sintaxis que se pueden usar para operar y realizar modificaciones en el “interior” de un recurso.
  3. POST /tables/customers/1 con un cuerpo HTTP muy específico puede hacer lo que quiera; por ejemplo, identifique a otro cliente del que desea copiar todos los datos y que haya configurado el recurso identificado por el URI de solicitud.

TL; DR: si desea reemplazar las entradas por completo, use PUT . Si desea actualizarlos parcialmente, use PATCH . Si quieres hacer algo más especializado, usa POST . Además, el URI de solicitud se puede combinar con una cadena de consulta como en el ejemplo DELETE anterior.

Como puede ver, los ejemplos que proporciona son bastante fáciles de mapear en REST. Entonces, para responder a su pregunta: No, la restricción verbo + sustantivo no es demasiado simplista.

Como ya he dicho, hace que algunos casos extremos sean difíciles de modelar, pero los casos extremos son difíciles de modelar sin importar en qué arquitectura y paradigma intentes modelarlos. Puede que no sean los mismos en diferentes arquitecturas , pero todos tienen casos extremos que requieren un poco más de reflexión y no son inmediatamente aparentes o intuitivos para resolver.

More Interesting

¿Dónde se usan las gramáticas JAPE? ¿Qué aplicaciones usan gramáticas JAPE o sistemas similares?

Si tomas un trabajo de desarrollador front-end, ¿puedes obtener un puesto completo de Rails o JavaScript algún día, o te encasillaría para hacer principalmente front-end a menos que hicieras un estudio sustancial?

¿Cuánto vale el mercado de aplicaciones de comercio social?

¿Dónde empiezo a construir un raspador web?

¿Qué es bueno para una aplicación web con un marco de JavaScript front-end, AngularJS o React.js, si estoy usando .Net MVC5 como mi arquitectura de back-end?

¿Qué se necesitaría para convencer a Mattias P Johansson de hacer un tutorial completo de aplicación web (Full Stack) en su canal de YouTube?

¿Qué arquitectura de framework de aplicaciones web es más apropiada y por qué?

¿Qué tipos de aplicaciones web serían más adecuadas para Rails / Django en lugar de Node.js?

¿Es correcto que Python tenga un rendimiento lento para crear aplicaciones web?

¿Cuáles son los mejores elementos de la interfaz de usuario (controles, patrones, etc.) que han surgido recientemente en sitios web modernos y aplicaciones web?

¿Qué herramienta en línea puedo usar para descubrir cómo mejorar la usabilidad de mi página de inicio?

¿Cómo se comparan Trello y Evernote?

¿Cuál es la mejor manera de hacer que las aplicaciones web se muestren de la misma manera en todos los navegadores?

¿Podemos implementar una aplicación web existente en AWS Lambda?

¿Qué sucede si alguien roba un token web JSON que se usa para la autenticación en una aplicación web?