您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

设计RESTful API的5个最佳实践

时间:2020-06-21 15:15:56  来源:  作者:
设计RESTful API的5个最佳实践

 

RESTful%20API无处不在,比任何其他API体系结构都为现代世界提供了更多支持。%20根据ProgrammableWeb的研究,REST占API的80%。%20这些API的构建和结构方式可以在当今竞争异常激烈的世界中成败一家公司。%20设计不良的API可能难以使用,在最需要它们时可能会失败,并且是寻找敏感数据的黑客的重要目标。%20另一方面,利用最佳实践精心设计的API使开发变得轻而易举,吸引了新客户,并在用户之间建立了信心,从而可以提高保留率。

什么是RESTful%20API?

REST是REpresentational%20State%20Transfer的首字母缩写,描述了用于创建分布式Web服务的体系结构样式。%20REST允许用户使用标准的HTTP请求来远程调用代码并接收响应。%20REST与其他协议相比有几个优点:

·%20它将数据存储问题与用户界面分开,这意味着运行API的后端服务器可以处理所有逻辑以访问数据库并处理数据,然后再以统一的结构化方式将其返回给用户。%20这种一致的数据访问和结构使开发人员可以轻松构建前端应用程序,从而轻松地将您的应用程序前端移植到其他平台。

·%20REST%20API支持缓存常用的静态资源,以提高性能。

·%20REST是无状态的,因此完成请求的所有信息都包含在请求中。%20通过消除对服务器端状态同步逻辑的需求,这简化了API。%20这也使扩展变得更容易,因为任何服务器都可以处理任何请求而无需跟踪会话。

(如果构建RESTful%20API对您来说是新手,或者您希望沙盒尝试这些最佳实践,请从Heroku中尝试该参考体系结构,该体系结构易于部署。)

因此,现在,这是构建RESTful%20API的五种最佳实践。

1.使用错误状态代码

HTTP已经内置了100多个状态代码。使用RESTful%20API中的状态代码来传达一般错误对于开发人员来说是天赐的礼物。%20开发人员将能够立即发现问题,这意味着花费更少的时间编写解析器来处理所有不同类型的错误。%20是否因为会话未登录而拒绝了请求?%20有一个状态码。%20是否缺少资源?%20CRUD服务是否收到请求但无法连接到数据库?%20这些都有状态码,几乎还有其他常见行为。%20状态代码也可以与特定的错误消息结合使用,以提供有关失败请求的详细信息。

以下是Node.js%20API的一小段代码,用于说明:

 

该端点通过传入的用户ID返回用户配置文件。 响应请求而发送的状态代码可准确告知开发人员发生了什么错误,从而使响应更易于处理,并为他们节省了大量时间和麻烦。 开发人员可以根据状态代码实现用于处理不同错误的例程,而API提供详细的错误信息。 在这种情况下,404错误会告诉呼叫者找不到东西。 响应中的JSON会特别告诉调用者它是找不到的用户ID,而不是错误是指向端点还是请求的资源,这是模棱两可的。

2.好的文档

文档是API最重要(也是最被忽略)的方面之一。 正式文档可以是客户与产品的第一联系点,并且是开发团队是否采用该产品的关键因素。 好的文档看起来干净,一致,并为开发人员做好充分准备,使其可以快速使用您的API。 有人学习您的API的速度越快,他们开始使用它的速度就越快。 文档应该具有统一的外观,并包括所有相关信息:端点,兼容方法(GET,POST,PUT等),哪些参数是可选的和必需的以及预期的数据类型。

这个来自Heroku平台API文档的屏幕截图展示了开发人员所需的完整文档。 它显示了已执行的操作,访问的端点以及使用的HTTP方法。 它还提供了有关可选参数的详细信息,并向用户显示了正确实施的所有示例的工作示例。 样本响应还说明了如何构造返回的数据。

设计RESTful API的5个最佳实践

 

Heroku的API文档干净,井井有条,可为开发人员提供所需的一切。

3.速率限制和节流

API请求可能会占用大量资源,需要大量的计算能力和存储空间。如果您不小心,大量连续的并发请求可能会减慢服务器速度甚至使您的DOS慢下来,一种简单的方法是使用许多可用工具之一,例如express-rate-limit(一种设计为Express的中间件)专门用于以简单,直观的方式处理限速。您还可以实现与身份验证绑定的速率限制逻辑,从而在控制授予每个用户的权限方面具有更大的灵活性。通过要求用户进行身份验证,可以跟踪每个用户发送的请求数量,这也使您可以限制或停止这些请求。还可以授予不同的用户访问不同的API端点的权限。例如,与普通非特权用户相比,管理员用户可以通过API访问更多信息或更多请求。使用身份验证的另一个好处是它提供的安全性,使我们进入了下一个最佳实践。

4.保护API

API必须安全!%20黑客使用自动脚本随意攻击服务,因此API需要采取主动安全措施,以保持操作顺畅运行并保护敏感数据。%20首先,每个Web应用程序都应具有HTTP严格传输安全性(HSTS)策略,以确保所有连接均被加密。%20确保连接的安全性可以防止网络嗅探,中间人攻击,协议降级攻击以及通过cookie盗窃进行会话劫持。%20您可能还希望设置和隐藏某些可以利用的标头,例如那些揭示有关您的API基础结构的信息的标头,这些信息可能对攻击者有用。%20有很多工具可以解决这个问题。%20例如,如果您使用Node.js运行API,则可以使用Helmet.js之类的东西。%20实现此中间件很容易:

 

为防止API泄漏敏感的客户数据(例如密码),请编写单元测试以进行安全性测试。 最后但并非最不重要的一点是,您应该要求身份验证令牌才能访问您的API。 这使开发人员可以控制谁有权访问哪些信息。 通过拒绝冒犯用户,它还可以使阻止API服务器上的攻击变得更加容易。

5.使用JSON

API的目的是从公司资源中提供数据。 根据北欧API,通常使用三种格式来返回数据:XML,YAML和JSON。

XML易于人类阅读,但是数据包含在一组标记标签中,这些标记迅速增长并且需要额外的带宽。 开发人员还必须解析标签的内容才能访问数据。相比之下,YAML仅占用很少的带宽,但需要使用外部库或自定义的解析器和编码器来处理数据.JSON与XML完美地融合在一起 和YAML一起使用:它是人类可读的,不需要高带宽或自定义解析即可将数据移入JAVAScript兼容结构。

结论

使用RESTful API实现这五种做法将使您的API更加易于使用和安全。 具有良好文档的安全,可靠的API可以提供出色的开发人员体验,并且更高的易用性将帮助您提高采用率。 此外,这些最佳实践将使您的代码保持整洁,操作平稳进行,并使客户满意。

(本文翻译自Michael Bogan的文章《5 Best Practices for Designing RESTful APIs》,参考:
https://medium.com/swlh/5-best-practices-for-designing-restful-apis-42f55cb787d3)



Tags:RESTful API   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在此前写的文章“从零基础入门进行小程序开发实战”中,已经介绍过背单词的小程序,因为没有备案的服务器资源只能使用系统后台提供的缓存功能存储用户数据。缓存有大小限制,而且...【详细内容】
2021-07-27  Tags: RESTful API  点击:(109)  评论:(0)  加入收藏
Facebook、GitHub、Google以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API仍然是服务和消费数据的最佳选择之一。 但是你是否考虑过学习行...【详细内容】
2020-08-30  Tags: RESTful API  点击:(71)  评论:(0)  加入收藏
RESTful API无处不在,比任何其他API体系结构都为现代世界提供了更多支持。 根据ProgrammableWeb的研究,REST占API的80%。 这些API的构建和结构方式可以在当今竞争异常激烈的世...【详细内容】
2020-06-21  Tags: RESTful API  点击:(48)  评论:(0)  加入收藏
基于一些不错的RESTful开发组件,可以快速的开发出不错的RESTful API,但如果不了解开发规范的、健壮的RESTful API的基本面,即便优秀的RESTful开发组件摆在面前,也无法很好的理...【详细内容】
2020-01-02  Tags: RESTful API  点击:(74)  评论:(0)  加入收藏
RestFul API 是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计API的时候也应该至少要满足RestFul API的最基本的要求(比如接口中尽量使用名词,使用POST 请求创建...【详细内容】
2019-08-12  Tags: RESTful API  点击:(264)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条