Web开发人员经常谈论REST原理和RESTful数据体系结构 ,因为它是现代开发的关键方面,但有时会令人难以置信。 REST本身并不是一项技术,而是一种使用某些组织原则创建API的方法 。 这些原则将指导开发人员,并创建一个更通用的环境来处理API请求。
在本文中,我想从鸟瞰的角度解释RESTful开发实践 。 我想解决的是问题而不是解决方法 。 尽管我将同时涉及这两个方面,但是本文是为从事Web开发的人员撰写的,但是根本无法理解REST API的概念。
REST适用于Web开发人员
缩写REST代表代表性状态转移 。 这听起来可能有些混乱,并且Wiki条目使其听起来更加混乱。 但是可以简化术语。
REST只是用于数据传输的一系列准则和体系结构样式 。 它通常应用于Web应用程序,但也可以将数据传递到软件。
缩写API代表应用程序编程接口,是与其他库或应用程序连接的方法。 Windows具有多个API ,Twitter也具有Web API ,尽管它们执行具有不同目标的不同任务。
结合在一起,RESTful API是遵循REST体系结构的API。
REST架构到底是什么?
这是很难确定细节的地方。 但是,存在一些体系结构常量 ,例如:
- 整个API的一致性
- 无状态存在 ,即没有服务器端会话
- 在适当的地方使用HTTP状态代码
- URL端点与逻辑层次结构的使用
- URL中的版本控制,而不是HTTP标头中的版本控制
没有像W3C HTML5规范这样过分具体的准则,这可能会导致混乱 ,并且围绕REST术语存在不确定性。
此外,即使大多数现代RESTful API都适用上述规则 ,也不应将其视为一成不变的规则 。
REST是一种轻量级的方法 ,使其非常适合HTTP数据。 这就是为什么REST在网络上如此流行的原因,以及为什么它被广泛视为API开发的最佳选择。
正如Vinay Sahni所说,“ API是开发人员的UI。” 一切都应该易于使用,并提供出色的用户体验。 RESTful API旨在做到这一点。
RESTful API的关键要点
这些技巧是在严格针对Web应用程序的API的上下文中。 这意味着需要HTTP ,并且通常意味着API数据托管在外部服务器上 。 让我们研究一下RESTful API在API用户方面的工作方式。
API用户是Web开发人员,他们可以构建连接到外部API服务器的脚本,然后通过HTTP传递必要的数据。 然后,开发人员可以在其网站上显示数据, 而无需亲自访问外部服务器 (例如提取Twitter数据)。
一般来说,有四个用于访问RESTful API的 命令 :
-
GET
用于检索对象 -
POST
用于创建新对象 - 用于修改或替换对象的
PUT
-
DELETE
用于删除对象
这些方法中的每一个都应与API调用一起传递,以告诉服务器该怎么做。
绝大多数Web API 仅允许GET
请求从外部服务器提取数据。 身份验证是可选的,但在允许潜在破坏性的命令(例如PUT
或DELETE
时肯定是个好主意。
但是,到目前为止还没有很多RESTful API。 考虑一下Pokéapi ,它是一个免费的PokémonAPI数据库。 它对公众开放并具有适当的速率限制(在一段时间内将用户限制为一定数量的API请求),但仅允许使用GET
方法访问资源。 俗称这是“ 仅消耗API” 。
返回类型也很重要,并且应保持所有资源的同质性 。 JSON是一种流行的返回类型,其中包含说明正确数据结构的在线规范 。
RESTful API将名词用于API对象 ,并将动词用于对这些对象执行操作 。 身份验证可能是其中的一部分,速率限制也可能是其中的一部分。 但是,可以非常简单地使用API,而不必担心用户限制。
访问API资源
通常可以从直接的网站地址访问公共API。 这意味着URL结构很重要 ,并且仅应用于API请求。
某些URL可以包含前缀目录,例如/v2/
用于先前API的更新版本2。 对于不想折旧其1.x API但仍要提供最新结构的开发人员来说,这很常见。
我真的很喜欢这篇文章,内容涉及基本的URL结构以及其他服务的示例。
请注意,基于HTTP方法 ,端点的返回数据将发生巨大变化 。 例如, GET
检索内容,而POST
创建新内容。 该请求可能指向同一端点,但结果可能会大不相同。
在线查看示例可以帮助您更清晰地理解概念。 我们已经看过Pokeapi ,但是这里有一些其他现实世界的API示例供您阅读:
建立自己的API
构造您自己的API的过程不应该轻描淡写,但是它也没有您想像的那么复杂。 它确实需要了解API设计模式和最佳实践才能构建出真正的价值。
每个API必须连接到您的服务器以返回某种数据。 您不仅需要编写代码来做到这一点,而且还需要格式化返回数据。 其他潜在的要求包括身份验证和速率限制 ,因此构建API当然不适合胆小者。
但是,让我们看一下API体系结构的一些基本原则 。
建立端点
API开发的一方面是构建端点 。 创建资源时,您想使用名词,而不是动词 。 这意味着API数据应该返回一个人,地方或事物,通常是具有特定属性的事物 (例如,一条推文及其所有元数据)。
学习命名名词可能很困难,但这是API开发的关键方面。 尽可能简化是最好的。
争论的焦点是单数名词还是复数名词。 如果您要创建Twitter API,则可能首先拥有对象组(即鸣叫),然后才具有对象项(即鸣叫ID)。
$ /tweet/15032934882934
$ /tweets/15032934882934
在这种情况下,我认为单数形式看起来更好。 当仅返回一个资源时尤其如此。 但是,没有记录在案的100%正确答案,因此请最适合您的项目。
设置退货类型
另一个考虑因素是返回类型数据 。 大多数网络用户期望JSON内容,因此这可能是最佳选择。 如果您要同时提供XML和XML,则XML是另一种选择。 但是,JSON是Web开发人员中最基本的API返回类型。
API开发还有很多,所以我建议先使用API 。 通过这种方式,您可以看到其他开发人员如何构建他们的API,并希望您会逐渐熟悉典型要求。
如果您只是入门,请考虑浏览以下开发教程:
更多资源
学习Web应用程序开发的最佳方法是通过实践。 公认的理论总是值得研究的,因为它使您可以与开发人员交谈并了解事物的工作原理。
但是开始进行API开发的一个好地方是首先连接到其他API 。 了解客户端连接的基础知识,然后您可以通过从头开始创建自己的API来进行服务器端API开发。
如果这是您的目标,请考虑以下资源,以在您的旅途中提供帮助。