最佳实践:REST API 的 HTTP 请求参数

HTTP 请求中的请求参数解释

当客户端发起 HTTP 请求 时,它们可以在 URL 末尾添加请求参数(也叫查询参数或 URL 参数)来传递数据。这些参数以键值对的形式出现在 URL 中,方便浏览和操作。

请求参数示例

以下是一些带有请求参数的 URL 示例:

    /users?id=1234/posts?category=tech&sort=asc/search?q=hello+world

这些参数出现在 ? 之后,并使用 & 分隔,每个参数都能够被服务器读取以便处理请求。

为什么需要请求参数?

请求参数作为 REST API 的一部分,具备多项优势:

  • 简单易用:通过 URL 附加键值对,是传递数据的一种简便手段,减少了复杂请求体的需求。
  • 灵活性高:你可以根据需要组合不同的参数,轻松引入新参数而不会影响现有的客户端。
  • 缓存优势:不同参数对应的 URL 可以分别被浏览器和内容分发网络(CDNs)缓存。
  • 书签化:包含参数的 URL 可以轻松创建书签保存。
  • 日志记录:参数值在服务器日志中直接可见,便于跟踪和分析。
  • 编码支持:URL 支持对参数值进行编码,例如将空格编码为 %20。 综合来看,请求参数为 REST API 提供了一种高效传递数据的方式。

四种主要的 API 参数类型

请求参数主要有四种类型:

查询参数 (Query Parameters)

这是最常见的参数类型,附加在 URL 路径的 ? 之后:

/users?page=1&per_page=20

查询参数适用于过滤、排序、分页和简单查询。

路径参数 (Path Parameters)

这些参数通常嵌入在 URL 路径中:

/users/{userId}

这种方式能够让标识符和固定属性直接出现在资源路径上,增加 API 的自描述性。

HTTP 请求头参数 (Header Parameters)

头部参数提供了关于请求的元数据,比如内容类型、认证信息等。这些参数位于 HTTP 请求头中,与请求体分离。 示例:

    Content-Type: application/jsonAuthorization: Bearer <token>

请求体参数 (Body Parameters)

这些参数包含请求体中的数据,通常用于 POST、PUT 和 PATCH 请求来传输如 JSON 对象或表单数据的实际内容。 示例:

    {"username": "example","password": "password123"}

使用 HTTP 方法的请求参数

GET 请求的参数

GET 请求通常使用查询参数,适用于过滤结果、分页和排序。查询参数的例子:

    GET /users?status=active&sort=-createdAt

POST 请求的参数

虽然 POST 请求可以包含查询参数,但一般避免这么做。应该使用路径参数来识别资源,并将其他数据放入请求体中:

    POST /users/{userId}/comments{"text": "Hello World!"}

PUT 请求的参数

与 POST 类似,PUT 请求应使用路径参数来识别资源,并将需要更新的数据放在请求体中:

    PUT /users/{userId}{"firstName": "Jane"}

PATCH 请求的参数

PATCH 请求用于部分更新已有资源,仅发送需要修改的数据,优化网络流量。 示例:

    PATCH /api/users/123{"age": 40,"city": "New York"}
 

API 工具中使用请求参数

Apifox  是一个 API 文档工具,能根据请求参数等信息生成详尽的 API 文档。

请求参数文档

在 Apifox 中,可以记录请求参数的名称、类型、描述及验证规则,确保使用 API 的开发人员清楚每个请求的预期数据。

GsRxyJMIdq.jpg

代码中访问参数

在服务器端,可以从请求中提取和验证参数再使用。在 Express 中,参数储存在 req.params 和 req.query 对象中。 示例:

    app.get('/users', (req, res) => {const sort = req.query.sort;const limit = req.query.limit;// ...});

客户端可以使用类似 qs 的库来生成和解析参数字符串。

参数验证

验证请求参数是避免安全问题和数据错误的重要步骤:

  • 类型检查:确保参数类型正确(如数字、字符串)。
  • 值检查:验证值的合法性(如范围、模式)。
  • 必要性:确保关键参数存在。
  • 清理:防止 XSS 和其他注入攻击。 如 Express Validator 等库能使参数验证更为简便。

总结

请求参数使得数据传输更加简便、灵活,并且符合 REST 原则。 在使用请求参数时,最佳实践包括:

  • 对于 GET 请求使用查询参数,对于其他方法使用路径参数。
  • 避免在请求体中使用查询参数,应该将数据放在请求体内。
  • 同时验证、清理和记录参数。
  • 在 API 之间保持参数的一致性。

通过这些策略,可以构建出高效、安全的 API 系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS-Lodash工具库

文档&#xff1a;Lodash Documentation orderBy函数&#xff1a;根据条件进行排序 注&#xff1a;第一个是要排序的数组&#xff0c;第二个是根据什么字段进行排序&#xff0c;第三个是排序的方式&#xff08;desc倒序&#xff09; 安装方式&#xff1a;Lodash npm i lodash…

小型企业网络组网与配置仿真实验

实验要求如下: 我这里以学号46为例 一、IP 地址规划表 &#xff08;一&#xff09;主类网络 &#xff08;二&#xff09;子网划分 需要自己计算有效ip范围 在C类主网络192.168.46.0/24中&#xff0c;我们需要先了解这个网络的子网掩码为255.255.255.0&#xff0c;其二进制…

『ZJUBCA MeetUP』 5月25日线下活动——Aptos 链的动态与应用

2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME&#xff1a;2024/05/25 ADD&#xff1a;浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区&#xff0c;致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…

TPM之VMK密封

本篇文章主要介绍基于TPM的Bitlocker全盘加密时&#xff0c;VMK密钥的密封&#xff08;Seal&#xff09;流程&#xff0c;至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么&#xff0c;这里不做解释&#xff0c;需要自己脑补一下&#xff08;╮(╯▽╰)╭&#xff09;…

2024年大屏幕互动源码+动态背景图和配乐素材+搭建教程

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码 运行环境&#xff1a;PHPMYSQL 下载源码地址&#xff1a;极速云

数据库设计:实体关系图

一个良好的设计对于数据库系统至关重要&#xff0c;它可以减少数据冗余&#xff0c;确保数据的一致性和完整性&#xff0c;同时使得数据库易于维护和扩展。 实体关系图&#xff08;Entity-Relationship Diagram、ERD&#xff09;是一种用于数据库设计的结构图&#xff0c;它描…

Webrtc支持HEVC之FFMPEG支持HEVC编解码(一)

一、前言 Webrtc使用的FFMPEG(webrtc\src\third_party\ffmpeg)和官方的不太一样,使用GN编译,各个平台使用了不一样的配置文件 以Windows为例,Chrome浏览器也类似 二、修改配置文件 windows:chromium\config\Chrome\win\x64 其他平台: chromium\config\Chrome\YOUR_SYS…

ARM32开发——第一盏灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程需求分析项目新建代码编写GPIO初始化 程序编译程序烧录烧录扩展&#xff08;熟悉&#xff09;官方烧录器烧录&#xff08;…

一份不知道哪里来的第十五届国赛模拟题

这是一个不知道来源的模拟题目&#xff0c;没有完全完成&#xff0c;只作代码记录&#xff0c;不作分析和展示&#xff0c;极其冗长&#xff0c;但里面有长按短按双击的复合&#xff0c;可以看看。 目录 题目代码底层驱动主程序核心代码关键&#xff1a;双击单击长按复合代码 …

今日学会的,刘姥姥进大观园

Git - First-Time Git Setup 下载了Git&#xff0c;会用Git了&#xff1f; 还有这个&#xff1a;学习 HTML5 Canvas 这一篇文章就够了 | 菜鸟教程 (runoob.com) JavaScript 用法 | 菜鸟教程 (runoob.com) 看到这个真的是受益匪浅&#xff0c;我终于懂了一直有的疑惑。 3D可…

RAG技术探索

什么是RAG 1 RAG原理 RAG&#xff08;Retrieval Augmented Generation, 检索增强生成&#xff09;&#xff0c;即LLM在回答问题或生成文本时&#xff0c;先会从大量文档中检索出相关的信息&#xff0c;然后基于这些信息生成回答或文本&#xff0c;从而提高预测质量。RAG模型尤…

数据在内存中的存储<C语言>

导言 在计算机中不同类型的数据在计算机内部存储形式各不相同&#xff0c;弄懂各种数据在计算机内部存储形式是有必要的&#xff0c;C语言的学习不能浮于表面&#xff0c;更要锻炼我们的“内功”&#xff0c;将来在写程序的时候遇见各种稀奇古怪的bug时&#xff0c;也便能迎刃而…

控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解&#xff08;附带案例实现&#xff09; 文章目录 控制障碍函数CBF详解&#xff08;附带案例实现&#xff09;1. Control Affine System2. Lyapunov Theory, Nagumos Theory, Invariance Principle3. Control Lyapunov Function (CLF) and CLF-QP4. Control …

算法(十二)分治算法

文章目录 算法概念算法例子字符串中小写转大写求X^n问题 算法概念 分治算法&#xff08;divide and conquer&#xff09;算法的核心思想其实就是"分而治之"&#xff0c;将原问题划分成n个规模较小&#xff0c;并且结构与原问题相似的子问题&#xff0c;递归地解决这…

移植其他命令行Vivado IDE的工具

移植其他命令行Vivado IDE的工具 介绍 本章介绍如何迁移各种AMD命令行工具以在AMD中使用 Vivado™集成设计环境&#xff08;IDE&#xff09;。 迁移ISE Partgen命令行工具 ISE™Design Suite Partgen工具可获得&#xff1a; •系统上安装的所有设备的信息 •详细的包装信息 您可…

[openwrt-21.02]openwrt-21.02 make menuconfig不显示luci-app-firewall问题分析及解决方案

问题描述 make menuconfig在 在applications界面没有luci-app-firewall 问题分析 首先重新执行 ./scripts/feeds update -a ./scripts/feeds install -a 然后再次执行make menuconfig&#xff0c;依然不显示&#xff0c;所以不是feeds安装的问题 最后看到log有个openmptc…

记录mabatis-plus初体验

一、简介 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 测试问题现象&#xff1a;测试mabatis的crud方法 增加 批量删除都没有问题 单单就是这个根据ID删除有问题 解决方案&#xff1a;真的就是pom文件的问题 自己的版本是Intelli…

Fully Convolutional Networks for Semantic Segmentation--论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/abs/1411.4038 3.数据集地址 论文摘要的翻译 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们表明&#xff0c;卷积网络本身&#xff0c;经过端到端&#xff0c;像素对像素的训练&#xff0c;在…

【新能源大巴BMS结构与乘用车的区别】

新能源大巴BMS结构与乘用车的区别 这篇文章主要介绍新能源大巴的电池和BMS的结构与乘用车的区别。 主要有&#xff0c;新能源大巴行业、新能源电池系统结构和新能源大巴的BMS系统。 第一部分 新能源大巴行业 其实数数全球的商用车(大巴卡车)&#xff0c;大致的方向还是沿着就…

前端传String字符串 后端使用enun枚举类出现错误

情况 前端 String 后端 enum 前端 后端 报错 2024-05-31T21:47:40.61808:00 WARN 21360 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to con…