当前位置: 首页 > 知识库问答 >
问题:

javascript - get请求为什么有的请求参数放到链接后面有的放到请求参数中?

文寒
2023-11-10
今天调用了一个接口,接口要求传一个日期过去,当时没仔细看(因为文档也没写请求参数和相应参数),以为是传一个data,里面有条件查询的参数之类的,结果第一次报错。
    export function todayUserNum(data){        return request({            url:'/system/home/todayNum',            method:'get',            data:data        })    }

Required request parameter 'date' for method parameter type String is not present(方法参数类型字符串所需的请求参数“日期”不存在)

后面第二次调用的时候注意到了文档上的参数说明,于是就改成了这个样子
    export function todayUserNum(date){        return request({            url:'/system/home/todayNum',            method:'get',            params:date        })    }
同样接口给我抛出了上述的错误,并且我的请求参数值被分割了,我意识到可能是框架的某块公用请求将参数值分割了。我又更换了一次写法
    export function todayUserNum(date){        return request({            url:'/system/home/todayNum?date='+date,            method:'get'        })    }
这次接口成功获取到了数据,但是我又试了试另一种写法
    export function todayUserNum(date){        return request({            url:'/system/home/todayNum'+date,            method:'get'        })    }
这时候接口抛出了404异常

Error: Request failed with status code 404

我又又尝试了一下其他写法,这一次,我将请求参数放在了请求体里面
    export function todayUserNum(date){        return request({            url:'/system/home/todayNum'+date,            method:'get',            params:{                date:date            }        })    }
接口请求成功
但是有的接口的get请求方式就用上述的某种方法可以走通,比如:
    1. export function getCheck(id) {          return request({            url: '/system/check/' + id,            method: 'get'          })       }    2. export function listCheck(query) {          return request({            url: '/system/check/list',            method: 'get',            params: query          })       }
我不太懂这种写在链接后的和写在请求体上的区别在哪里,而且也不太懂为什么有的参数可以直接将值放上去,有的要规定请求参数名和值,希望大佬可以解答一下

共有2个答案

翟嘉年
2023-11-10

就算你没接触后端接口设计也没关系。
前端的路由你应该知道,路由里面有两个关键的概念,

1.params:/router1/:id ,    //router1/123,/router1/789 ,这里的id叫做params2.query:/router1?id=123 ,  //router1?id=456 ,这里的id叫做query。

query添加需要按照浏览器规则来拼接 ?id=123&id2=567&id3=789
axios中的params接受一个对象 他最终也会以query的形式给你拼接到 url 后面

华福
2023-11-10

这个问题涉及到 HTTP 请求和 API 设计的一些基本概念。

首先,要理解 HTTP GET 请求的格式。GET 请求通常会将参数放在 URL 中,这些参数通常被称为查询字符串(query string)。查询字符串是以 '?' 字符分隔 URL 和参数的,参数本身是由 '&' 字符分隔的键值对。例如:/system/home/todayNum?date=2023-07-06

在你的例子中,接口 /system/home/todayNum 要求一个名为 'date' 的参数。这个参数可以是 URL 中的查询字符串参数,也可以是请求体中的内容。但是,这取决于你使用的 API 和框架,以及你尝试实现的功能。

  • 在你的第一个尝试中,你将参数放在了请求体中:export function todayUserNum(data){...}。这是 POST 和 PUT 请求的常见做法,而不是 GET 请求。GET 请求的数据通常放在 URL 中,而不是请求体中。所以,你的接口抛出了 404 异常,因为服务器没有找到以 '/system/home/todayNum' 开头的路径。
  • 在你的第二个尝试中,你将参数放在了 URL 的查询字符串中:export function todayUserNum(date){...}。这是正确的 GET 请求做法。在这种情况下,你的接口成功获取了数据,因为服务器可以正确解析查询字符串中的 'date' 参数。
  • 在你的第三个尝试中,你将参数直接放在了 URL 中,没有使用查询字符串:export function todayUserNum(date){...}。这也是可以的,只要你的服务器能够解析出 '/system/home/todayNum2023-07-06' 中的 '2023-07-06'。但是,这种方法可能会让其他开发者混淆,因为并不是所有的 API 都支持这种格式。
  • 在你的第四个尝试中,你将参数放在了请求体中,但是使用了 'params' 属性:export function todayUserNum(date){...}。这也是可以的,只要你的服务器能够解析出请求体中的 'date' 参数。但是,这并不是 GET 请求的标准做法。

总的来说,你应该将 GET 请求的参数放在 URL 的查询字符串中,除非你明确知道你的 API 支持将参数放在请求体中。对于 POST 和 PUT 请求,你应该将参数放在请求体中。

 类似资料:
  • 问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。

  • get请求参数放body里,post请求参数放url上这种是否合理? 有时候参数很少的情况我会让前端把参数放到post的url上,因为我感觉比如有两个参数,我后端要新建一个bean用@RequestBody接收完全没必要 我的想法是:如果get请求的参数可能比较复杂比如有bean的嵌套或者长度比较大超过了容器的限制(不考虑产品涉及是否合理),就可以放在body中,否则就放在url上;如果post请

  • 问题内容: 我是新手,所以我的代码可能会出现很多错误,但是我要实现的目标是将GET请求发送到带有 参数的服务器。鉴于我的函数有两个参数,我试图做到更多。我不确定如何将两者结合到实际的URLRequest中?到目前为止,这是我尝试过的 问题答案: 建立请求时,请求的主体没有,但是所有内容都放在URL上。要构建网址(并正确地将其转义), 您还可以使用. 唯一的窍门是,大多数Web服务都需要+转义字符百

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 我试图写一个Spring MVC GET控制器,它需要Java8即时作为请求参数: 与: 我正在从一些React/Javascript代码触发一个GET请求,如下所示: Spring似乎不喜欢它,并抛出一个错误。以下是错误消息: 知道我为什么会收到这个吗? 谢谢你