Entonces, un servicio RESTful tiene un conjunto fijo de verbos en su vocabulario. Un servicio web RESTful toma estos de los métodos HTTP. Hay algunas supuestas ventajas de definir un vocabulario fijo, pero realmente no entiendo el punto. Quizás alguien pueda explicarlo.
¿Por qué un vocabulario fijo como lo describe REST es mejor que definir dinámicamente un vocabulario para cada estado? Por ejemplo, la programación orientada a objetos es un paradigma popular. RPC se describe para definir interfaces fijas, pero no sé por qué la gente supone que RPC está limitado por estas restricciones. Podríamos especificar dinámicamente la interfaz tal como un servicio RESTful describe dinámicamente su estructura de contenido.
Se supone que REST es ventajoso porque puede crecer sin ampliar el vocabulario. Los servicios RESTful crecen dinámicamente al agregar más recursos. ¿Qué tiene de malo extender un servicio especificando dinámicamente un vocabulario por objeto? ¿Por qué no solo usamos los métodos que se definen en nuestros objetos como vocabulario y hacemos que nuestros servicios describan al cliente cuáles son estos métodos y si tienen o no efectos secundarios?
Esencialmente tengo la sensación de que la descripción de una estructura de recursos del lado del servidor es equivalente a la definición de un vocabulario, pero luego nos vemos obligados a usar el vocabulario limitado para interactuar con estos recursos.
¿Un vocabulario fijo realmente desacopla las preocupaciones del cliente de las preocupaciones del servidor? Seguramente tengo que preocuparme por alguna configuración del servidor, esta es normalmente la ubicación de los recursos en los servicios RESTful. Quejarse por el uso de un vocabulario dinámico parece injusto porque de todos modos tenemos que razonar dinámicamente cómo entender esta configuración de alguna manera. Un servicio RESTful describe las transiciones que puede realizar al identificar la estructura del objeto a través de hipermedia.
Simplemente no entiendo qué hace que un vocabulario fijo sea mejor que cualquier vocabulario dinámico autodescriptivo, que fácilmente podría funcionar muy bien en un servicio similar a RPC. ¿Es esto solo un mal razonamiento para el vocabulario limitante del protocolo HTTP?
Reflexión
Solo para aclarar mis pensamientos un poco mejor de lo que lo he hecho. Supongamos que está diseñando cualquier API de propósito general, tal vez ni siquiera frente a la web. ¿Sería feliz si alguien dijera que solo puede usar estos nombres de método en sus objetos? REST no está restringido a HTTP, pero considere la situación en la que cada API que escribe, frente a la web o de otra manera simplemente consistía en objetos que contienen métodos GET POST PUT y DELETE. Entonces, ese método object.foo que quería definir no es posible. Debe definir un nuevo objeto llamado foo y llamar a su método GET. Así es esencialmente cómo funciona REST, y me hace sentir un poco incómodo pensar en ello. No tiene una mejor comprensión genérica de lo que hace foo, simplemente se vio obligado a crear un nuevo objeto para lo que es esencialmente un método en un objeto principal. Además, su API no es menos compleja, acabas de ocultar la complejidad de la interfaz creando más objetos. Los servicios web RESTful nos obligan a adoptar una interfaz que puede o no ser suficiente en el contexto de la API que estamos exponiendo. Quizás haya una buena razón para hacerlo con las API orientadas a la web, pero una buena razón para no adoptar interfaces estándar para cada objeto en cada API de propósito general. Un ejemplo práctico sería apreciado.