Portanto, um serviço RESTful possui um conjunto fixo de verbos em seu vocabulário. Um serviço da Web RESTful os utiliza dos métodos HTTP. Existem algumas supostas vantagens em definir um vocabulário fixo, mas eu realmente não entendo o ponto. Talvez alguém possa explicar isso.
Por que um vocabulário fixo, conforme descrito pelo REST, é melhor do que definir dinamicamente um vocabulário para cada estado? Por exemplo, a programação orientada a objetos é um paradigma popular. O RPC é descrito para definir interfaces fixas, mas não sei por que as pessoas assumem que o RPC é limitado por essas restrições. Poderíamos especificar dinamicamente a interface, assim como um serviço RESTful descreve dinamicamente sua estrutura de conteúdo.
O REST deve ser vantajoso, pois pode crescer sem estender o vocabulário. Os serviços RESTful crescem dinamicamente adicionando mais recursos. O que há de errado em estender um serviço especificando dinamicamente um vocabulário por objeto? Por que não usamos apenas os métodos definidos em nossos objetos como vocabulário e nossos serviços descrevem ao cliente o que são esses métodos e se eles têm ou não efeitos colaterais?
Essencialmente, sinto que a descrição de uma estrutura de recursos no servidor é equivalente à definição de um vocabulário, mas somos forçados a usar o vocabulário limitado no qual interagir com esses recursos.
Um vocabulário fixo realmente dissocia as preocupações do cliente das preocupações do servidor? Eu certamente tenho que me preocupar com alguma configuração do servidor, normalmente esse é o local dos recursos nos serviços RESTful. Reclamar pelo uso de um vocabulário dinâmico parece injusto, porque precisamos raciocinar dinamicamente como entender essa configuração de alguma maneira. Um serviço RESTful descreve as transições que você pode fazer identificando a estrutura do objeto por meio da hipermídia.
Apenas não entendo o que torna um vocabulário fixo melhor do que qualquer vocabulário dinâmico autoexplicativo, o que poderia facilmente funcionar muito bem em um serviço semelhante a RPC. Esse é apenas um mau raciocínio para o vocabulário limitador do protocolo HTTP?
Reflexão
Apenas para esclarecer meus pensamentos um pouco melhor do que eu fiz. Suponha que você esteja criando uma API de uso geral, talvez nem mesmo voltada para a web. Você ficaria feliz se alguém dissesse que você só pode usar esses nomes de métodos em seus objetos? O REST não se restringe ao HTTP, mas considere a situação em que todas as APIs que você escreve, voltadas para a Web ou simplesmente consistem em objetos que contêm os métodos GET POST PUT e DELETE. Portanto, esse método object.foo que você deseja definir não é possível. Você precisa definir um novo objeto chamado foo e chamar seu método GET. É basicamente assim que o REST funciona, e me deixa um pouco desconfortável pensar nisso. Você não tem um entendimento genérico melhor do que o foo faz, apenas foi forçado a criar um novo objeto para o que é essencialmente um método em um objeto pai. Além disso, sua API não é menos complexa, você acabou de ocultar a complexidade da interface criando mais objetos. Os serviços web RESTful nos forçam a adotar uma interface que pode ou não ser suficiente no contexto da API que estamos expondo. Talvez haja um bom motivo para fazer isso com APIs voltadas para a Web, mas um bom motivo para não adotar interfaces padrão para todos os objetos em todas as APIs de uso geral. Um exemplo prático seria apreciado.