您如何称呼基于HTTP的API,该API使用URI命名资源,并使用HTTP动词(PUT,POST,DELETE,GET ...)来操纵这些资源?
根据Roy Fielding的抱怨,它不是REST,因为没有超媒体。
在我的团队内部,每个人都将其称为“ REST API”。我称其为“类似REST”,但它不是描述性的,其含义还很模糊。我对此非常困惑,因为关于REST存在巨大分歧。我不想参加火焰大战,只是使用正确的用语。
您如何称呼基于HTTP的API,该API使用URI命名资源,并使用HTTP动词(PUT,POST,DELETE,GET ...)来操纵这些资源?
根据Roy Fielding的抱怨,它不是REST,因为没有超媒体。
在我的团队内部,每个人都将其称为“ REST API”。我称其为“类似REST”,但它不是描述性的,其含义还很模糊。我对此非常困惑,因为关于REST存在巨大分歧。我不想参加火焰大战,只是使用正确的用语。
Answers:
将其称为HTTP API。
它符合HTTP标准,并且没有其他层次(例如SOAP)。
HTTP标准定义了资源,动词,标头,内容协商等。
REST(表示状态传输)是一种架构,其要求恰好符合现有的HTTP标准,但是HTTP只能独立工作。
以我的经验,90%的“ REST HTTP API”应该称自己为“ HTTP API”。
不要为丢掉REST标签而感到羞耻。与微服务和非关系数据库一样,您不必具有RESTful API就可以了。罗伊(Roy)着手创建他可能寿命最长,最向后兼容的网络应用程序体系结构。他做得很好。但并非所有事物都需要40多年的兼容性。
理查森成熟度模型像这样
因此,根据该模型,我将其称为符合Richardson 2级或类似标准的Web服务。
http://martinfowler.com/articles/richardsonMaturityModel.html
Hypermedia从未真正在类似REST的API中流行,以至于当API实际上实现超媒体导航时,术语RESTful根本不足以将其与任何其他“ RESTful” Web API区分开。REST已经成为一个无所不包的术语,或者任何基于资源的Web API和诸如Hypermedia API之类的新名称 都被创造出来,以专注于超媒体概念。
我并不是真的想提倡使用不正确的术语,但是我认为,对REST的一般现代解释只是意味着大多数人使用统一的URL和HTTP动词。这是不正确的,但是任何了解Fieldings定义的人也应该知道很多其他人不知道。另一方面,仅通过观察现有的“ RESTful” API的实现方式来了解REST的人,在提及诸如HATEOAS或按需代码之类的鲜为人知的REST约束时,就不会知道您在说什么。Fielding可能不喜欢它,但我认为回到原始定义已经为时已晚。老实说:如果您第一次听到有人谈论他的REST API,您会立即认为它不包含超媒体,不是吗?
坚持正确的RESTful定义通常只会造成额外的混乱。就像许多术语随着时间的推移改变了其含义,或者群众只是错误地接受了这些术语一样,如果有人知道原始定义,但如果使用更广泛的现代REST解释的人,我将不予纠正,我深表感谢。
*并为此建立类似于REST的非超媒体API的新术语。无论如何我们应该如何称呼它们?... 休息?
它是通过HTTP的CRUD接口(创建,读取,更新,删除)。
我想不出任何权威来支持这一主张,所以希望您得到更多更好的答案。
您可以随心所欲地调用它,人们倾向于(几乎出于宗教目的)锁定您不遵循的REST“规范”的任何部分,并以此作为抗议点,这对开发非常不利。就是说,一个简单的事实是,存在(几乎)零个服务来为其API服务实现真正的REST。
在我们的团队中,我们将其命名Stateless API
为“开发中”,因为我们要替换的是遗留的有状态和功能性SOAP API(遗留API本身也从未具有一致且有意义的名称,因此我们也不会太在意名称)。
现在,该项目只有一个API,简称为the <project> API
。当我们最终替换它时,新的API将简称为the new <project> API
。
除非您有太多的API需要将其与其他API区别开,否则给它任何奇特的描述性内部名称几乎是没有意义的(在这种情况下,您可能还应该重命名所有其他API)。
您可以将其称为Web API。这是一个非常宽泛的术语,但可以避免对其他API类型定义的含义一视同仁。与HTTP API等替代方法相比,该术语的技术性和精确性较低,但是与非技术人员交谈时可能会占优势。
伦纳德·理查森(Leonard Richardson)也使用了这个术语(定义了理查森成熟度模型的Richardson成熟度模型已经提到了另一个答案-一个关于API与REST体系结构的接近程度的公认度量)。如果删除“ RESTful Web API ” 的“ RESTful”部分,则将获得此结果。