全栈开发的基本技能:构建RESTfulAPI的13条最佳实践Facebook、GitHub、Google和许多其他公司需要一种方法来提供和使用数据。在当今的开发环境中,RESTfulAPI仍然是提供和使用数据的最佳选择之一。但是您是否考虑过学习行业标准?设计RESTfulAPI的最佳实践是什么?理论上,任何人都可以在不到五分钟的时间内快速启动数据API——无论是Node.js、Golang还是Python。我们将探讨构建RESTfulAPI时应考虑的13种最佳实践。但首先,让我们快速了解一下RESTfulAPI。什么是RESTfulAPI?RESTfulAPI需要满足以下约束才能称为RESTfulAPI。客户端-服务器模型:RESTfulAPI遵循客户端-服务器模型,其中服务器提供数据,客户端连接到服务器以使用数据。客户端和服务器之间的交互是通过HTTP(S)请求进行的,HTTP(S)请求传输请求的数据。无状态:更重要的是,RESTfulAPI应该是无状态的。每个请求都被视为一个单独的请求。服务器不应跟踪任何可能影响未来请求结果的内部状态。统一接口:最后,统一定义了客户端和服务器如何交互。RESTfulAPI定义了命名资源的最佳实践,但定义了允许您修改资源/与资源交互的固定HTTP操作。可以在RESTfulAPI中访问以下HTTP操作:GET请求:检索资源POST请求:创建资源或向API发送信息PUT请求:创建或替换资源PATCH请求:更新现有资源DELETErequest:todeletearesource有了更深入的了解,是时候学习更多关于RESTfulAPI的最佳实践了。本文为您提供了一份包含13项最佳实践的可操作清单。让我们一起探索吧!1、正确使用HTTP方法我们已经讨论了可用于修改资源的HTTP方法:GET、POST、PUT、PATCH和DELETE。尽管如此,许多开发人员仍倾向于滥用GET和POST或者PUT和PATCH。通常,我们会看到开发人员使用POST请求来检索数据。此外,我们看到开发人员在只想更新资源的单个字段时使用PUT请求来替换资源。确保使用正确的HTTP方法,因为这会给使用您的RESTfulAPI的开发人员带来很多困惑。最好遵守预先确定的准则。2.命名约定了解RESTfulAPI命名约定将帮助您以有组织的方式设计API。根据您服务的资源设计RESTfulAPI。例如,您的API管理作者和书籍(是的,一个经典示例)。现在,我们想添加一个新的作者或者访问一个ID为3的作者。你可以设计下面的路由来实现这个:api.com/addNewAuthorapi.com/getAuthorByID/3想象一个API托管很多资源,每个资源都有很多属性.可能的端点列表将变得无穷无尽,而且对用户来说不是很友好。因此,我们需要一种更有条理和标准化的方式来设计API端点。RESTfulAPI最佳实践描述端点应以资源名称开头,而HTTP操作描述操作。现在我们得到:POSTapi.com/authorsGETapi.com/authors/3如果我们想访问ID为3的作者所写的所有书籍怎么办?对于这种情况,RESTfulAPI也有解决方案:GETapi.com/authors/3/books最后,如果你想删除ID为5的作者ID为3的书怎么办?同样,让我们??按照相同的结构化方法来形成以下端点:DELETEapi.com/authors/3/books/5简而言之,利用HTTP操作和资源映射的结构化方式来形成易于理解的端点路径。这种方法的最大优点是每个开发人员都了解RESTfulAPI的设计方式,并且他们可以立即使用API,而无需阅读每个端点的文档。3.使用复数资源资源应始终使用复数形式。为什么?假设您要检索所有作者。因此,您将调用以下端点:GETapi.com/authors。当您阅读请求时,您无法判断API响应是否只包含一个作者或所有作者。因此,API端点应该使用复数资源。4、正确使用状态码状态码在这里不是玩玩的,它们有明确的用途,状态码通知客户端请求成功。最常见的状态代码类别包括:200(OK):请求已成功处理并完成。201(Created):表示资源创建成功。400(BadRequest):表示客户端错误。也就是说,请求格式错误或缺少请求参数。401(未授权):未授权,您尝试访问您没有权限的资源。404(NotFound):请求的资源不存在。500(InternalServerError):内部服务器错误,服务器在执行请求的过程中抛出异常。完整的状态代码列表可以在MozillaDevelopers找到。5.遵循相同的约定大多数情况下,RESTfulAPI提供JSON数据,因此,应遵循camelCase大小写约定。但是,不同的编程语言使用不同的命名约定。6.如何处理搜索、分页、过滤和排序搜索、分页、过滤和排序等操作不代表单独的端点。这些操作可以通过使用随API请求提供的查询参数来完成。例如,让我们检索按姓名升序排序的所有作者。您的API请求应如下所示:api.com/authors?sort=name_asc。另外,我想检索一位名叫“Michiel”的作者。该请求类似于api.com/authors?search=Michiel。幸运的是,许多API项目都带有内置的搜索、分页、过滤和排序功能。这将为您节省大量时间。7.API版本控制我不常看到这种情况,但这是对API进行版本控制的最佳实践。这是向用户传达重大更改的有效方式。通常,API的版本号包含在APIURL中,例如:api.com/v1/authors/3/books。8.通过HTTP标头发送元数据HTTP标头允许客户端在请求中发送附加信息。例如,Authorization标头通常用于发送身份验证数据以访问API。您可以在此处找到所有可能的HTTP标头的完整列表。9.速率限制速率限制是一种有趣的方式来控制每个客户端的请求数量。这些是服务器可能返回的速率限制标头:X-Rate-Limit-Limit:告诉客户端它可以在指定的时间间隔内发送多少请求。X-Rate-Limit-Remaining:告诉客户端在当前间隔内它仍然可以发送多少请求。X-Rate-Limit-Reset:当速率限制重置时通知客户端。10.有意义的错误处理如果出现问题,向开发人员提供有意义的错误消息很重要。例如,TwilioAPI返回以下错误格式:{"status":400,"message":"Resourcebooksdoesnotexist","code":24801,"more_info":"api.com/docs/errors/24801"}在此示例中,服务器返回状态代码和人类可读的消息。此外,为查找特定错误的开发人员返回内部错误代码,这使开发人员可以快速找到有关错误的更多信息。11、选择合适的API框架不同编程语言的框架有很多,选择一个支持RESTfulAPI最佳实践的框架非常重要。对于Node.js,后端开发者喜欢使用Express.js和Koa,而对于Python,Falcon是一个不错的选择。12.记录你的API最后,写文档!我不是在开玩笑,这仍然是传递您新开发的API知识的最简单方法之一。即使您的API遵循为RESTfulAPI概述的所有最佳实践,您仍然值得花时间记录各种元素,例如您的API处理的资源或您应用于服务器的速率限制。想想你的开发伙伴,文档大大减少了学习API所需的时间。13.保持简单!不要使您的API过于复杂,保持资源简单。正确定义您的API处理的不同资源将帮助您避免将来出现与资源相关的问题。定义你的资源,还要准确定义它的属性和资源之间的关系。这样一来,如何连接不同的资源就没有争论的余地了。如果您喜欢这篇关于API最佳实践的文章,您可能也会喜欢学习从头开始构建RESTfulAPI。
