JSON:API现在是一段时间最受欢迎的标准之一。它是在2013年构思的,通过萨伯特不同的RC版本(随着它的急剧改变),最终在2015年中期与V1.0返回。
我对JSON的兴趣:多年来,API已经改变了。最初的是,它就像瘟疫一样,我稍后推荐它,现在我一般建议服用它,如果可能的话,跳过它。
除了尝试标准化如何代表物品,集合,元数据和出现优异的目标!),它就列出了解决大量问题,如复合文档。
A&#34的概念;复合文件" - 至少在API世界中至少 - 是艺术相关数据的艺术,进入主要请求的资源。这是为了缩写客户端必须制作的HTTP调用数量。
客户长期以来一直非常不满意多次HTTP / 1.1呼叫,尤其是在移动网络上。这令人担忧对Whewe设计API有一个明显的影响。多个呼叫被认为是一个不好的设计点,到获取用户的位置将包括他们为他们工作的公司,并且该公司可能拥有的位置,并且包括其他内容......
这是一点混乱,所以将惯例和标准发明为Makethose包括可选,json:API是主要竞争者之一。
2013年的某个地方我还发布了一个名为分数维的工具,该工具是基于代码I'自2013年初以来在生产中运行的DBEEN。(其他题联)的目标是相同的,便于嵌入和筑巢。
2013年这一切都有道理。多个电话很糟糕,所以我们不得不减少那些,而不假设太多并使我们的要求比他们应该慢。这一持续有效,即使是2015年杰森:API被吓坏了。
猜猜2015年5月还有什么释放? RFC 7540,否则称为HTTP / 2。回想起来,这似乎是高度的,因为HTTP / 2有点使得JSON的复合文件方面:API是一个小点毫无意义的,而复合文件与我携手共同用JSON:APIIS作为标准携手回发。
不要挑选json:api,同样可以说hal,odata和它植物分形和#39; s筑巢/嵌入感到愚蠢,就像它应该在充满活力的版本中被扯掉。
在那里有大量的资源解释了HTTP / 1.1和HTTP / 2之间的差异,所以我' LL让它们覆盖它。
这里的主要点是HTTP / 1.0迫使您在每一个呼叫中处理DNS,HTTP握手,SSL协商等,以及您的主页想要从API中的10个,那么'做所有的垃圾10时间... HTTP / 1.1实际上是用连接的:保持活力,但没有许多人似乎使用了这一点。当我们在Wewore启用它时,它会加速HTTP交互约〜10%,这很好。
HTTP / 2不仅维护每个域的单个连接以进行重用,但这些CallScan是异步处理的。您可以要求所有A' s,那么asyncrequest的回调要求一些b' s' s回应。和C和D.
如果您可以使用serverpush然后youdon' t必须等待A'在您申请B&#39之前要回复。 TheServer将开始向您发送B' s!
对我来说:API一直主要是通过网络黑客减少薪酬载荷的大小,如复合文件,但是使用了anothertrategy。 SparseFieldSets - GraphQL的IdeaFairly基础 - 允许客户指定它们的字段'重新接触,因此API只能发送这些字段。
虽然稀疏的Firstalset可以节省几kbs,但有很多其他方式抵消的尺寸。
整个心态"更多握手=坏"已迫使我们将字段推开相同的资源,以避免进行新的资源或子资源。现在,WEDON' T需要害怕它,我们可以停止像最近提出的Partialsrade-Offi这样的黑客,并朝着更多的资源迈进,在范围内有点繁殖。
发票Don' t需要付款状态,或订单项数组,所以我们不需要担心修剪现场级别的响应,他们只能拥有拥有的相关资源,可发现超媒体控制。
如果拆分资源听起来像是一个大的变化,你想要的是强阵的实际响应,HTTP / 2也有你的背部。标题是压缩的,HPACK类似于Gzip,但稍微好一点,它的东西是CloudFlare的漂亮兴奋。
那个'&#39是不提的整个协议是二进制而不是纯文本,这让你成为另一个漂亮的提升。如果你'仍然悲伤的json缓慢,你可以使用内容协商将bson或protobuff添加到您的休息API,这是一个很大一部分让人们对Grpc感到如此兴奋的事情。
一般来说,再一次,跳过一点使用稀疏的Firstalset跳过一点点的潜在速度效益似乎丢失了制作的Makeyour API的想法减少了变量,具有更多有针对性的资源,这些资源在网络级别可持续缓存。
nginx已经支持http / 2。 Go的一些人的语言具有内置HTTP / 2SUPPORT,因此您可以享受像服务器推送的HTTP / 2的全部优势。 nodejs也是。
其他人至少可以在HTTP / 1.1设置前面杠杆效率使用CloudFlare,速度等。
目前禁止100%的浏览器支持它的HTTP / 2'完整,但情况非常好。 [现代浏览器支持http / 2](http://caniuse.com/#feat=http2),这些浏览器由88%的用户使用。如果您的API主要是基于Web的,并且旧的浏览器支持很重要,或者您不知道哪些浏览器会击中它,然后也许您可以继续担心像复合文档等网络黑客。
将HTTP / 2与目标,网络缓存端点(通过速溶,清漆,鱿鱼等)结合,使得超媒体控制(Hateoas)看起来Waaaaaaaay少愚蠢。
我在看看我明白的行动之前,我不等待回复,那个' s慢! - 虚构的叙事设备
不再! HTTP客户端Net-Http2 Inuruby使您的呼叫变得不错,方便,因此您可以在响应进入时立即运行incallbacks。
超媒体一般似乎在你'重新吓坏了TheTronsportation层时更加可行。
它也意味着你'重复不会害怕制作子资源。在工作台现在我们有/用户,他们想要推动"位置"在那里(用户可以访问的每个Wewore位置)。
这将是你的方式如何在2014年在2014年进行,但在2017年,应该是GET / USE / 123 /位置或获取/位置?USER_UUID = 123,或者谁关心。它只是在那里猛扑猛扑,慢慢放缓,只是在案例中需要它。
包括,部分等等,可以毕业为实际的全新请求,而不是成为某种覆盖的网络黑客,因为我们害怕握手时间。
人们经常说"为什么我想浪费时间让一个休息的api在刚刚使用x时做到这一点。"
与JSON:API现在对我感到有点愚蠢,它使GraphQLFeel显着更少有用......在这个网络围绕这个网络破解NOLONGER设计的东西是有用的。
嗯,GraphQL是所有美味的网络黑客之王,GRPC就是HTTP / 2 + Protobuff,I' M Left意识到这些小利基API设置,因为他们的营销网站正在制定。
如果您已经休息了(ISH)API,则可以从Nowand开始使用HTTP / 2,获得GRPC的一半好处,并且不再关心GraphQL的许多键(无论如何都适用于HTTP API)。
也许你可以删除" ish"通过重点在您的RESAPI作为状态机现在,您现在的机器'重新害怕制作更多Httpcalls。
这些前面的解决方案远非完美,我将在Nextarticle中的复合文件(完成!)我在努力写下大量的世界问题,我不在Nuttallicle(完成!)我不觉得任何人都应该匆匆忙忙立即更改一切,拒绝Web周围的更改环境。
随着网络发展的发展,以满足更改的要求,Asthey Evolve我们不再需要尽可能多的黑客完成工作。前端开发人员aren' t制作css图像spriteSanore,js / css组合也会消失。
HTTP / 2是所需的开发人员的表示,现在我们可以全部使用HTTP INITS,而无需如此多的网络黑客攻击使其表现为eNuardo获得作业。
使用JSON:API / HAL / ODATA是一个精致的方法,可以走出基于HTTP / 1.1的API,而不是发明自己的复合文件方法,但DOYOU真的需要建立一个基于HTTP / 1.1的API,还是它只是惯性?