在这个数字时代,咱们的日常生存中充满着各种运行程序和系统之间的交互。无论是社交媒体、在线购物还是智能家居设施,它们都须要经过API(运行程序接口)来成功数据的传输和通讯。但是,这些看似方便的操作面前暗藏着复杂的协定。
API协定蕴含了一组规定和规范,用于定义不同系统之间如何启动通讯和共享数据。它们充任了不同运行程序之间的桥梁,使它们能够相互了解和交流。API协定的设计和成功须要思考到安保性、牢靠性和效率等起因,以确保数据的准确传输和系统的反常运转。
为了深化了解API的环球,这里对10个经常出现的API协定设计启动了梳理。
REST 是现代 web 开发中最盛行的 API 开发技术。它为数据传输提供了一种有形态的体系结构。客户端恳求蕴含满足恳求所需的一切详细信息,而主机不保管客户端的形态。
在RESTful API中,每个资源都可以经过惟一的URL启动标识和访问。客户端可以经过发送HTTP恳求来口头各种操作,如失掉资源、创立新资源、降级现有资源或删除资源。RESTful API的设计遵照一些基本准则,如资源的表白、客户端-主机架构、有形态性缓和存等。REST API 支持本地 HTTP 缓存头,并经常使用 HTTP 方法(POST、 GET、 PUT、 PATCH 和 DELETE)来操作数据。任何人都可以很容易地开局经常使用 REST,很方便,而且学习曲线平滑。它还具有良好的可读性和可保养性,由于其经常使用规范的HTTP方法和形态码来示意不同的操作结果。
但是,RESTful API也有一些限度。由于其有形态性,每次恳求都须要蕴含一切必要的信息,这或许会造成数据传输量较大。随着运行程序的扩展,端点的数量急剧参与,降级数据库形式或数据结构也并不容易。此外,关于复杂的业务逻辑,RESTful API或许不够灵敏,须要额外的架构和设计来满足需求。
假设没有任何特定的需求,REST 是最好的选用。例如,假设是开发新手,那么经常使用 REST 是完美的婚配,由于它的学习曲线比拟浅。此外,它还有一个很大的生态系统,可以很容易地找就任何疑问的处置打算。另外,在处置许多恳求和有限的带宽时,最好经常使用 REST。在这种状况下,可以经常使用其缓存支持来提高性能。
GraphQL 是2年引入的一种数据查问言语。它准许开发人员准确定位并失掉他们须要确实切数据。与 REST 相比,GraphQL 是一种客户端驱动的方法,客户端可以选择须要什么数据、如何失掉数据以及格式。它还处置了取得过多和取得无余的疑问,由于客户端可以准确定位所需的数据。
关于 API 而言,GraphQL 被视为一种新思绪。GraphQL 既是一种用于 API 的查问言语也是一个满足你数据查问的运转时环境。GraphQL 对 API 中的数据提供了一套易于了解的完整形容,也让 API 更容易地随着时期推移而演进。GitHub 是经常使用 GraphQL 的最大公司之一。2016年,GitHub 从 REST 转向 GraphQL,极大地促成了 GitHub 的极速增长。关于 GraphQL 的引见,网上曾经有十分多的资料了,这里不再过多形容,详细可以参考 GraphQL.org。
在 GraphQL 中,类型系统用于形容 GraphQL Server 的才干并用于判别一个查问能否有效。类型系统还形容了查问参数的输入类型,并在 GraphQL Runtime 中审核参数值的有效性。一个 GraphQL 服务是经过定义类型和类型上的字段来创立的,而后给每个类型上的每个字段提供解析函数。例如,在 Github GraphQL Server 中,经常使用viewer字段来形容登录用户的信息,而viewer的类型为User。一旦启动某个 GraphQL Server,它就能接受GraphQL 查问,并验证和口头该查问。GraphQL Server 首先会审核该查问以确保它只援用了已定义的类型和字段,而后运转指定的解析函数来生成结果。
与经常使用普通的 REST API 相比,强类型系统是 GraphQL 最吸引人的中央之一。GraphQL类型系统是其根基,一切人必定遵守,这就在大家对API接口形容构成一致看法上施展着关键作用。在 GraphQL 中,GraphQL Runtime 确定 GraphQL Server 可以提供的才干,而消费端详细要失掉哪些数据则齐全由消费者说了算。客户端(消费端)可以以愈加对等的位置,愈加踊跃地介入到整个的数据交互环节。借助于GraphQL的类型系统,客户端可以愈加自在地依据自己的需求来取得自己的所需,而无需遭到 Server 端的限度。
GraphQL 岂但扭转了通讯双方的话语权,还使得客户端可以准确地预测服务端的照应。关于 API 的版本控制而言,GraphQL 自创了其余言语中的 @deprecated注解。
GraphQL的无余之处在于查问或许很复杂,缺乏内置的缓存支持。与 REST 相比,学习 GraphQL 具有必定应战性,并且自动状况下它不支持文件上行。
即使如此,在确定能否要经常使用 GraphQL 技术时,仍须要做仔细的剖析,且无法为了追新而驳回 GraphQL。GraphQL 是查问具有多条记载的数据库的极佳选用。您可以经常使用 GraphQL 消弭数据的额外读取,并且只检索特定格式的必要数据以提高运行程序性能。此外,GraphQL 十分适宜于须要从多个资源聚合数据的状况。当不齐全了解客户端如何经常使用 API 时,也可以经常使用 GraphQL。使 用 GraphQL,不须要事前定义一个严厉的契约。相反,可以依据客户端反应逐渐构建 API。