RESTful API 设计中的返回结果规范

引言

RESTful API 的设计已经成为现代 Web 应用程序的标准,因为它允许客户端和服务器之间的数据交换变得简单和直观。在实际开发中,我们通常需要返回大量数据以及一些元数据,比如状态码、错误信息、分页信息等等。为了提高 API 的可读性和可维护性,我们需要遵循一些规范来定义返回结果。本文将介绍一些在 RESTful API 设计中常用的返回结果规范,并提供一些示例代码供参考。

状态码

HTTP 协议中有一个状态码的概念,用于表示客户端请求的结果,其中 2xx 系列表示成功,4xx 表示客户端请求有误,5xx 表示服务器错误。在 RESTful API 设计中,我们通常遵循以下几种状态码:

  • 200 OK:表示请求已成功执行,并返回所需数据
  • 201 Created:表示已成功创建新资源,并返回该资源的 URL
  • 204 No Content:表示请求已成功执行,但返回的数据为空
  • 400 Bad Request:表示客户端提交参数有误,无法解析请求
  • 401 Unauthorized:表示客户端未提供身份验证信息或身份验证失败
  • 403 Forbidden:表示客户端没有权限执行所请求的操作
  • 404 Not Found:表示请求的资源不存在
  • 500 Internal Server Error:表示服务器出现意外错误

在具体使用过程中,我们还需要考虑一些业务特殊的状态码。比如说,创建资源时,如果客户端提交的数据存在重复,我们可以使用 409 Conflict 表示冲突。如果客户端利用一个过期的 token 发送了请求,我们可以使用 419 Authentication Timeout 表示未认证。

返回格式

在 RESTful API 中,返回结果通常使用 JSON 格式。JSON 可以轻松地解析为对象,这使得数据交换变得简单和直观。在设计返回结果格式之前,我们需要确定自己的 API 有哪些资源,并确定每个资源都有哪些字段。通常情况下,我们需要考虑以下几方面:

消息描述

返回结果应该携带有意义的消息描述,对客户端开发者有利。比如说,在添加一条记录后返回“新纪录已添加成功”等消息。

资源元数据

资源元数据通常是一些关于资源本身的数据,如分页信息、总数、页数等等。在 RESTful API 中,元数据通常被放在头部或者每个资源的尾部,以避免过多的重复数据。可以使用以下形式的返回结果:

-
  ------- -
    ----
    ---
  --
  ------- -
    ------------- -
      -------- ----
      ----------- ---
      --------------- --
      ------------ --
      ---------------- --------------------------------------
      ---------------- ----
    -
  -
-

集合资源

在 RESTful API 中,通常使用集合资源来描述一组相关的数据(如用户列表)。返回结果应该简单,并易于客户端处理。一个典型的集合资源返回格式如下:

-
  ------- -
    -
      ----- --
      ------- -------
      -------- ------------------
    --
    -
      ----- --
      ------- --------
      -------- --------------------
    -
  -
-

单一资源

在 RESTful API 中,通常使用单一资源来描述某个实体的详细数据(如某个用户的详细信息)。一个典型的单一资源返回格式如下:

-
  ------- -
    ----- --
    ------- -------
    -------- ------------------
  -
-

错误处理

RESTful API 的错误处理相当重要,因为它能让客户端更好地处理服务器返回的错误信息。返回结果中应该携带一些错误信息和恰当的状态码,以便客户端开发者了解发生了什么错误。一般来说,我们需要在返回结果中添加“error”字段,用于存储错误信息,格式如下:

-
  -------- -
    ------- ----
    ---------- ---- --------
  -
-

此外,我们通常会在 HTTP 头部添加一些特殊的字段,如 Retry-After 表示服务器会在多少秒内尝试再次运行请求,WWW-Authenticate 表示如何对请求进行身份验证等等。

示例代码

以下是一个伪造的例子,用于展示上述规范的常见使用场景。

-------- --- --
------------- ----------------
-
  ------- -
    ----- --
    ------- ----- -----
    ---------- -
      --------- ------
      ------ --------
      ------- -----
    -
  -
-
-------- --- -------
------------- ----------------
--------- -----------
-
  ------- -
    ----- --
    ------- ----- -----
    -------- ------------------
  -
-
-------- --- --- -----
------------- ----------------
-
  -------- -
    ------- ----
    ---------- ---- ------
  -
-

总结

本文介绍了在 RESTful API 设计中常用的返回结果规范。遵循这些规范,能够让开发者更好地理解 API 的行为,提高开发效率,降低开发成本。在实际项目中,应该根据具体业务情况,结合 RESTful API 的设计原则,制定出最适合自己项目的返回结果格式。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/654b29be7d4982a6eb51b55e


猜你喜欢

  • 如何在 Fastify 中使用 Joi 进行数据校验

    在编写前端应用或使用 Node.js 构建 Web 应用时,我们通常需要使用数据校验机制以确保数据的正确性和完整性。Joi 就是一种十分流行的 Node.js 数据校验库,在 Fastify 中使用 ...

    1 年前
  • Cypress 与 Ant Design 集成指南:让你轻松实现 Ant Design 应用的自动化测试

    前言 在前端开发领域中,自动化测试是必不可少的一环。针对 Ant Design 应用进行自动化测试,可以有效提升项目的质量和开发效率。本文介绍如何对 Ant Design 应用进行自动化测试,并提供 ...

    1 年前
  • 从 JavaScript 到 TypeScript:一个 Vue.js 开发者的真实转换体验

    从 JavaScript 到 TypeScript:一个 Vue.js 开发者的真实转换体验 随着 Vue.js 在前端领域的逐渐普及,越来越多的开发者开始使用 Vue.js 进行前端开发。

    1 年前
  • Kubernetes 中使用 Job 执行批量任务

    背景 在现代云计算环境下,Kubernetes 已经成为了容器编排领域的事实标准。在 Kubernetes 集群中,一个最常见的应用就是数据处理,例如数据挖掘、ETL(Extract-Transfor...

    1 年前
  • RxJS 在 Angular 中的基础应用实例教程

    RxJs是一个强大的响应式编程库,它广泛地应用于Angular中。现在,RxJs已经成为了Angular中的基础库,因此,深入学习RxJS是成为一个合格的Angular开发者的重要一步。

    1 年前
  • 在 Chai 中如何进行 DOM 元素的断言测试

    Chai 是一款 JavaScript 的测试框架,提供了丰富的断言库和灵活的测试接口。它可以用于浏览器端和 Node.js 环境。而在前端领域,对于 DOM 元素的测试也是不可缺少的。

    1 年前
  • Socket.io 消息推送的实现原理详解

    前言 随着 web 技术的不断发展,越来越多的应用需要实现实时双向通信。传统的 HTTP 被设计成一种客户端向服务器发送请求,服务器返回响应的单向通信协议。这种单向通信无法满足实时通信需求,因此需要一...

    1 年前
  • ES7 中 Object.entries() 方法的使用

    在 JavaScript 的进化过程中,ES7 (ECMAScript2016)为我们带来了更多有用的特性。其中,Object.entries() 方法就是其中之一。

    1 年前
  • 连接 Pool 超时导致 Sequelize 无法连接的解决方案

    Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping) 库,能够把数据库操作和 JavaScript 代码联系起来,让我们更加方便地操作数据库...

    1 年前
  • Webpack 多页面应用如何打包

    在前端开发中,Webpack 已经成为不可或缺的工具,尤其是在多页面应用开发中,Webpack 的作用更加显著。Webpack 可以将多个页面的打包逻辑集中在一起,同时实现代码的模块化、代码分割、按需...

    1 年前
  • ES10 新特性:正则表达式子句 “s” 修饰符

    在 ECMAScript 2019 标准中,正则表达式得到了一些新特性的增强和改进。其中,最引人注目的新特性是——正则表达式子句 “s” 修饰符。这个新特性可以让正则表达式更加强大,更易用,它的功能和...

    1 年前
  • 如何在 Angular 中使用 Jasmine 进行单元测试?

    单元测试是现代软件开发过程中不可或缺的一环,Angular 所采用的单元测试框架是 Jasmine。本文将为你提供一份如何在 Angular 中使用 Jasmine 进行单元测试的详细指南。

    1 年前
  • ES8 中共享内存和挫败的爆发

    在 ES8 的新特性中,共享内存(Shared Memory)受到了广泛的关注和讨论。共享内存是指多个线程或进程之间共享同一片物理内存,这样就能够避免数据的拷贝和同步,提高了程序的执行效率和速度。

    1 年前
  • ES6/ES2015:新特性指南

    ECMAScript 6(又称 ES6 或 ES2015)是 JavaScript 编程语言的最新版本,它引入了许多新特性和语法糖,帮助开发人员编写更具表现力和易于维护的代码。

    1 年前
  • 基于 AOP 的性能优化实践

    随着前端应用的复杂度不断提升,性能优化已经成为前端开发工作中不可缺少的一部分。而一个高效的性能优化方案,不仅需要在代码实现上做出改善,更需要从整个架构层面进行考虑。

    1 年前
  • ECMAScript 2020 的新特性:可选的 catch 绑定

    ECMAScript 2020 的新特性:可选的 catch 绑定 随着 JavaScript 的广泛应用,它的标准也在不断发展。ECMAScript 是 JavaScript 的标准化组织,它每年都...

    1 年前
  • 在 Express.js 中使用 HTTPS 和 SSL

    Express.js 是 Node.js 的一个流行框架,用于构建 Web 应用程序和 API。在生产环境中,为了保护用户数据和保护远程服务不受攻击,需要使用 HTTPS 和 SSL。

    1 年前
  • ESLint 在 Webpack 打包时的配置方法

    前言 在前端开发中,我们经常需要编写一些JS代码,而在编写代码的过程中必然存在一些规范和代码风格,比如:一些语法的使用、变量的命名以及代码缩进等,同时,在不同的项目中开发人员对于代码风格和规范的要求也...

    1 年前
  • Fastify 应用中使用 Nuxt.js 作为前端框架

    前端框架是现代 Web 应用开发中的重要工具,能够帮助我们更快、更高效地实现复杂的前端业务功能。Fastify 和 Nuxt.js 分别是 Node.js 后端和 Vue.js 前端领域中的热门框架,...

    1 年前
  • Hapi 构建 REST API 的步骤与技巧

    什么是 Hapi Hapi 是一个 Node.js 的开源框架,它被广泛用于构建 RESTful API 的服务端。Hapi 具有灵活、模块化和可扩展的架构,可以帮助开发者轻松地构建高质量的 Web ...

    1 年前

相关推荐

    暂无文章