Por lo tanto, un servicio RESTful tiene un conjunto fijo de verbos en su vocabulario. Un servicio web RESTful los toma de los métodos HTTP. Hay algunas supuestas ventajas al definir un vocabulario fijo, pero realmente no entiendo el punto. Quizás alguien pueda explicarlo.
¿Por qué es mejor un vocabulario fijo como lo describe REST que la definición dinámica de 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é las personas asumen que RPC está limitado por estos contraints. Podríamos especificar dinámicamente la interfaz, así como un servicio RESTful describe dinámicamente su estructura de contenido.
Se supone que REST es ventajoso ya que puede crecer sin ampliar el vocabulario. Los servicios RESTful crecen dinámicamente al agregar más recursos. ¿Qué hay de malo en extender un servicio especificando dinámicamente un vocabulario por objeto? ¿Por qué no utilizamos los métodos que se definen en nuestros objetos como vocabulario y nuestros servicios describen 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 utilizar el vocabulario limitado para interactuar con estos recursos.
¿Un vocabulario fijo realmente desvincula las preocupaciones del cliente de las preocupaciones del servidor? Seguramente tengo que preocuparme por la configuración del servidor, normalmente es la ubicación de los recursos en los servicios REST. Quejarse por el uso de un vocabulario dinámico parece injusto porque 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 de objetos a través de hipermedia.
Simplemente no entiendo qué hace que un vocabulario fijo sea mejor que cualquier vocabulario dinámico de autodescripción, que fácilmente podría funcionar muy bien en un servicio similar a RPC. ¿Es esto simplemente un razonamiento pobre para el vocabulario limitador 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 web. ¿Sería feliz si alguien dijera que solo puede usar estos nombres de métodos en sus objetos? REST no se limita a HTTP, pero tenga en cuenta la situación en la que cada API que escribe, está orientada a la web o simplemente consiste en objetos que contienen los métodos GET POST PUT y DELETE. Así que el método object.foo que querías definir no es posible. Tienes que definir un nuevo objeto llamado foo y llamar a su método GET. Esencialmente así es como 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, simplemente ha ocultado la complejidad de la interfaz al crear 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 hacer esto 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.