REST的数据是否是语义的一部分?


1

这是对要求explanation of REST的问题的跟进。

正如你可以从评论中看到我的答案,我们已经与Darrel Miller关于资源的最佳媒体表示有一个小的论点。我们已经进行了进一步的电子邮件讨论,导致了这个问题。

Darrel和我对REST的理解的主要区别在于数据的语义是否是REST API的一部分。

Darrel相信(我的解释他的话:-))数据的语义是REST API的重要组成部分,因此,选择的媒体代表应该反映它。因此,适当的REST API必须选择赛:

  • 像原子的知名媒体来表示数据,让尽可能多的客户能理解语义本身的资源;
  • 应用程序特定的媒体类型,如application/vdn.mycomany.mymedia,并期望客户端了解此媒体类型以便能够使用资源数据。 Application/xml不是一种好的资源表示形式,因为它不代表媒体类型中的语义,但需要客户端更多地了解语义。

另一方面,我相信REST API是一个与实际数据表示不同的层。 API公开的媒体类型只是一个传输资源数据的容器。数据的实际语义是分开处理的。因此,不了解数据的客户端仍然可以使用REST API。 Application/xml是一个非常好的数据表示,因为它允许理解架构的客户端紧密耦合,但仍允许不理解架构的客户端对资源进行一些基本处理。

因此,问题:是REST API的数据语义部分?我们是否应该只选择媒体类型来表示实际上代表数据语义的资源表示形式?

我会appreaciate如果人们在他们的答案张贴一些引文,最好从罗伊人本人。 :-)

4

让我们从头开始:媒体类型在那里为客户提供一种可用于决定下一步做什么的格式。没有html页面,浏览器没有链接去。没有html渲染器,浏览器无法渲染页面,也不知道该怎么做。

如果没有媒体类型,客户端就不知道它是否能够对字节流进行任何操作。事实上,当客户端收到指定application/xml的头文件时,除了获取XML解析器之外,它不知道该做什么。

所以问题的确是,如果客户端能够根据http消息做出决定而不必看看消息内容,还是应该查看消息内部(或者更糟糕的是先解析消息)知道该怎么做。

缺乏媒体类型意味着您的客户将不得不做更多的窥视工作,或者更糟的是在实体作出决定之前处理实体本身,以便进行渲染或处理。您现在必须为您可能需要处理的每种格式添加大量自定义行为,并且您在此过程中会失去一些联系。

这也是一个http的基本原则,中介应该能够处理请求而不检查正文,并且application/xml也存在问题。

现在当你说媒体类型的语义是API的一部分或者不是API的时候......什么构成了API?

从客户角度来看,没有API。有一个初始表示,可以让客户做出接下来要做什么的决定。媒体类型实际上就是客户获取它所需的信息来导航“API”的地方,因此,没有表示就没有API。此外,客户端应该只有三位知识:引导位置,HTTP协议和媒体类型。第一个只是一个URI,并不能传达超出继续需要的表示的位置。第二个已经非常清晰的语义。第三个是你可以控制的那个,因为这是你与客户的合同。

这种反应说,只要你想做某事,东西就会有语义:添加一个客户,使用POST向/ customers发送一个application/vnd.acme.customer + xml。

因此,我的回答是:设计一个REST架构需要两个步骤:资源建模(在概念层面)和媒体类型构建。其他任何事情,你可能做错了。


0

我不认为有必要对此过度迂腐。资源可以暴露多个表示;每个都有它自己的语义(甚至是多个语义的维度)。如果一个表示没有提供特定用例所需的语义,请提供一个用例。

因此,客户端不 理解数据,仍可以消耗 的REST API。

我不确定这是一个很好的试金石测试什么做或不做一个体面的代表。客户可以使用文档但不能很好地理解文档以做任何事情,这有什么好处?我想我不明白“资源的基本处理”是如何使application/xml成为比1s和0s更好的选择?

由于您要求参考,here's an article from Roy Fielding where he "proposes" a bitmap representation of social network graphs。我当然可以得到一台机器来显示这些位图,但是如果我不了解底层社交网络图有什么用处呢?如果将表示更改为application/xml,则允许一个天真的客户端从中提取附加的含义,该附加含义不包含在位图中?不。

  0

嗯,问题不在于它是否体面的表现,而是它仍然可以调用API RESTful。 :-) 22 2月. 092009-02-22 05:57:13

  0

我想这就是我不认为需要如此迂腐的地方。某些表示对某些客户来说自然会比其他表示更有意义。我想我认为这是关于无语义表示的质量的讨论,而不是关于可以称为REST的共识 22 2月. 092009-02-22 06:10:50

  0

位图示例是一个有趣的例子,因为它推断API将返回图像媒体类型,但是除了像素产生的视觉之外,还有更多的语义含义。这肯定与我之前对罗伊说的话的理解相矛盾。 22 2月. 092009-02-22 13:53:58

  0

老实说,在这一点上我不知道我辩论的哪一方。我觉得我在争论和反对你们两个:) 22 2月. 092009-02-22 17:58:26


0

检出this来自Mark Ba​​ker的一组幻灯片,更多解释为什么application/xml不满足“自描述”约束。您还可以在他的博客上阅读许多帖子,其中包括this,他继续解释为什么application/xml +命名空间不等同于媒体类型。