因此,RESTful服务的词汇表中有一组固定的动词。RESTful Web服务从HTTP方法获取这些信息。定义固定的词汇表具有一些假定的优势,但是我并不十分了解这一点。也许有人可以解释。
为什么REST概述的固定词汇表比为每个状态动态定义词汇表更好?例如,面向对象的编程是一种流行的范例。RPC是用来定义固定接口的,但是我不知道为什么人们会认为RPC受这些限制的限制。我们可以动态指定接口,就像RESTful服务动态描述其内容结构一样。
REST被认为是有利的,因为它可以在不扩展词汇量的情况下增长。RESTful服务通过添加更多资源而动态增长。通过动态指定每个对象的词汇表来扩展服务有什么问题?我们为什么不只使用在对象上定义的方法作为词汇,而让我们的服务向客户描述这些方法是什么以及它们是否有副作用?
从本质上讲,我感觉到服务器端资源结构的描述等同于词汇表的定义,但是随后我们被迫使用有限的词汇表来与这些资源进行交互。
固定的词汇量真的能使客户端的关注与服务器的关注脱钩吗?我当然必须关心服务器的某些配置,这通常是RESTful服务中的资源位置。抱怨使用动态词汇似乎不公平,因为无论如何我们都必须动态地推理如何理解这种配置。RESTful服务描述了您可以通过超媒体识别对象结构而进行的转换。
我只是不明白什么使固定的词汇表比任何自我描述的动态词汇表更好,后者可以在类似RPC的服务中很好地工作。这仅仅是限制HTTP协议词汇量的不好理由吗?
反射
只是为了澄清我的想法比我做的更好。假设您正在设计任何通用的API,甚至可能都不是面向Web的。如果有人说您只能在对象上使用这些方法名称,您会感到高兴吗?REST不仅限于HTTP,而是考虑您编写的每个API,面向Web或以其他方式仅由包含GET POST PUT和DELETE方法的对象组成的API的情况。因此,您无法定义该object.foo方法。您必须定义一个名为foo的新对象,并调用其GET方法。从本质上讲,这就是REST的工作方式,这让我有些不舒服。您对foo的作用没有更好的一般理解,只是被迫为本质上是父对象上的方法创建一个新对象。此外,您的API同样复杂,通过创建更多对象,您隐藏了接口的复杂性。RESTful Web服务迫使我们采用一个接口,该接口在我们要公开的API上下文中可能足够,也可能不够。也许有很好的理由使用面向Web的API来执行此操作,但是有理由不为每个通用API中的每个对象采用标准接口。一个实际的例子将不胜感激。