这可能是一个愚蠢的想法,但我还是想知道为什么。
我正在阅读关于REST API和HATEOAS等原则的内容。一直在想,为什么人们不只是使用HTML来表示他们的资源呢?
当然,我可以想到一些缺点,比如解析困难和数据增加,但另一方面,它是一种语义化超媒体语言,你可以将数据与展示分离。而且,它是人类可读的,人们可以在浏览器中与之交互、跟随链接、提交表单等。它可以被用作API和UI。
有人能解释一下为什么使用HTML来表示REST API是个糟糕的想法吗?
这可能是一个愚蠢的想法,但我还是想知道为什么。
我正在阅读关于REST API和HATEOAS等原则的内容。一直在想,为什么人们不只是使用HTML来表示他们的资源呢?
当然,我可以想到一些缺点,比如解析困难和数据增加,但另一方面,它是一种语义化超媒体语言,你可以将数据与展示分离。而且,它是人类可读的,人们可以在浏览器中与之交互、跟随链接、提交表单等。它可以被用作API和UI。
有人能解释一下为什么使用HTML来表示REST API是个糟糕的想法吗?
<div name="Elvis Presley" id="1" class="com.graceland.elvis.Person">
<a href="/people/12" id="12" class="com.graceland.elvis.Person">wife</a>
<span name="country" class="java.lang.String">USA</span>
</div>
试图使用Json复制那个操作是很困难的。首先,Json不能有效地处理“属性”!
REST支持包括HTML在内的各种内容。显然,大多数RESTful应用程序和Web API都专注于数据。因此,像JSON、XML和YAML这样的格式更方便构建和解析。
但是,如果您想利用REST的Conneg功能(基于头部Accept
的内容协商),则可以根据调用者处理多种内容:
Accept: text/html
。Accept: application/json
、Accept: application/xml
等。实际上,这取决于RESTful应用程序。我构建了实现conneg并根据指定的头Accept
返回多种内容的RESTful应用程序。
希望对您有所帮助,Thierry
简而言之:如果我们假设XML不是REST API的可怕想法,我认为使用XHTML的严格子集(JSON是JavaScript的严格子集)是合理的,特别是如果HATEOAS对您的API很重要。
HTML作为REST API的基本好处在于<a href="">
和<form action="">
标签(甚至可以将其简化为只有form
标签)。它被定义为处理超媒体的方式,并且这是唯一一个被广泛理解的链接文档的方法。您不需要阅读JSON-LD / HAL / Siren规范来理解HTML的结构。
这里的其他人反对它,因为HTML包含<h1>
标签。但是,您可以使用HTML的严格子集而不是尝试创建JSON的超集。 JSON实际上是JavaScript对象的严格子集。个人认为,这将成为一个优秀的REST API - 既易于人类理解又易于机器处理。
我最初认为microdata与您想要的接近,但它仅处理HTTP的GET
方法,您需要处理所有其他HTTP方法的方法(因此需要<form>
标签)。如果您只关心GET
请求,我认为那可能适合您。您在其中一条评论中询问了JSON-LD,并且在Schema.org wikipedia页面上可以看到microdata和JSON-LD之间的相似性。
<div itemscope itemtype="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span>
(born <time itemprop="birthDate" datetime="1954-08-16">August 16, 1954</time>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
<script type="application/ld+json">+schema app
{
"@context": "http://schema.org/",
"@type": "web master",
"name": "schema.org/person",
"Struturedata":
{
"@type": "Person",
"name": "chema mpnrroy josepinedamonroy",
"birthDate": "10/19/1982"
},
"geng": "male",
"Mecanismo":microdata. ".estructuredate./" validador
}
</script>
<ul>
可用于数组/列表,<dl>
可用于字典/映射,这是否正确? - Simon Elms