RESTAPI,为什么没有HTML而没有JSON?
这可能是个愚蠢的想法,但我想知道为什么 我正在阅读RESTAPI和HATEOAS等原则。一直以来,我都在想为什么人们不只是使用HTML来表示他们的资源 当然,我可以想到一些缺点,比如解析困难和数据增加,但另一方面,它是一种语义超媒体语言,可以将数据与表示分离。此外,它是人类可读的,人们可以在浏览器中与之交互、跟踪链接、提交表单等。它可以用作API和UI 有人能解释为什么将HTML用于RESTAPI表示是一个糟糕的想法吗 有人能解释为什么在RESTAPI中使用HTML是个糟糕的主意吗 陈述 对RESTAPI,为什么没有HTML而没有JSON?,html,json,api,rest,representation,Html,Json,Api,Rest,Representation,这可能是个愚蠢的想法,但我想知道为什么 我正在阅读RESTAPI和HATEOAS等原则。一直以来,我都在想为什么人们不只是使用HTML来表示他们的资源 当然,我可以想到一些缺点,比如解析困难和数据增加,但另一方面,它是一种语义超媒体语言,可以将数据与表示分离。此外,它是人类可读的,人们可以在浏览器中与之交互、跟踪链接、提交表单等。它可以用作API和UI 有人能解释为什么将HTML用于RESTAPI表示是一个糟糕的想法吗 有人能解释为什么在RESTAPI中使用HTML是个糟糕的主意吗 陈述 对
- 它的格式不好
- 客户端如何一致地解析结果
- 标记是冗长的
- 它不是一种供机器使用的格式。这是人类的观点。RESTAPI用于机器消费
- 大型响应过于庞大,会导致更多的网络延迟
- 至于表示,您不能假设API将由浏览器使用。本地Android/iOS应用程序呢李>
- www使用html作为REST!
这个主意一点问题也没有。就我个人而言,我首先要祝贺你质疑这一点,很多人都不这么认为
Rest并不强制要求应用程序协议,只是JSON/XML已经成为标准选择(因为HTML通常很难解析)。如果您使用简化版的HTML,您可能会发现它比JSON更有用
我已经编写了几个rest应用程序,它们接受application/json和text/html进行内容协商。它允许在浏览器上轻松测试
正如你所提到的,这无疑让仇恨变得更容易!
JSON(目前)没有处理HATEOAS或强类型的标准机制(大多数人使用@class方式指定JSON代表的对象)。在我看来,JSON还没有完成
另一方面,XML是。。但是,如果HTML不是一种XML,它又是什么呢
使用html:
<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包含很多GUI元素,它包含CSS、JS等。。。也所有这些都是供人类显示视图的。机器只对数据及其注释感兴趣 顺便说一句,REST可以使用HTML作为数据传输格式。例如,有(或刚刚有?)HTML序列化格式,并且可以使用HTML,例如
如果你说的是浏览器和REST客户端(只提取数据)都可以使用的HTML,那么我认为通常很难编写这样的HTML文档。REST支持包括HTML在内的各种内容。很明显,大多数RESTful应用程序和Web API都专注于数据。因此,JSON、XML和YAML等格式更便于构建和解析 但是,如果您想利用REST的Conneg功能(内容协商-基于页眉
),您可以根据调用者处理几种类型的内容:Accept
- 浏览器。也许我们更愿意显示HTML内容来显示请求的UI。您将有:
接受:text/html
- 申请书。在这种情况下,您更希望看到一些结构化数据。您可能会遇到这样的情况:
,Accept:application/json
,等等Accept:application/xml
发回几种内容 希望有帮助,Accept
蒂埃里;dr:如果我们假设XML对于REST API来说不是一个糟糕的想法,那么我认为使用XHTML的严格子集(JSON是JavaScript的严格子集)是合理的,尤其是如果HATEOAS对您的API很重要的话。 HTML对于REST API的基本好处是与您想要的非常接近,但是它只处理
对于HTTP,您需要处理所有其他HTTP方法的方法(因此需要GET
标记)。如果您只关心
请求,我认为这可能适合您。您在一条评论中询问了JSON-LD,在中可以看到micro data和JSON-LD之间的相似性 微观数据GET
JSON-LD阿凡达 导演:詹姆斯·卡梅隆 (1954年8月16日出生) 科幻小说
我认为主要的问题是HATEOAS并没有为开发者提供足够的实际好处,他们只是想传输数据,而不是有一个自我发现的API。自我发现并不是那么重要,因为与你的API交互的人只需要发现一次相关的URL,然后只要你的API没有改变,他们就不必再关心了。此外,即使您编写了一个完全支持HATEOAS的RESTAPI,其主要好处应该是客户端不需要硬编码URL,因此更改URL也无所谓。但是,您无法阻止API客户机不硬编码URL,因此如果您确实更改了结构,那么您将有不愉快的客户机。以web为例,它是一个(大部分)正确实现的RESTAPI,但链接腐烂仍然是一个主要问题,因为每个人+schema应用程序 { “@context”:”http://schema.org/", “@type”:“网站管理员”, “名称”:“schema.org/person”, “结构数据”: { “@type”:“Person”, “名称”:“chema mpnrroy josepinedamonroy”, “出生日期”:“1982年10月19日” }, "耿":"男",, “Mecanismo”:微数据。“.Esstructuredate./”validador }
<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>
- 浏览器。也许我们更愿意显示HTML内容来显示请求的UI。您将有: