关于如何发api请求

requestController

这是学长封装的一个方便请求的统一控制器,你在写每一个api方法的时候都应该在参数里带上它,复制粘贴就行。

关于requestController的解读

image.pngimage.png
先看这个RequestController规定的类型RequestInterface,表示了他的request方法(我们最常用的RequestController)

1.options

request的第一个参数对象,
通常需要传入url,method,如果有请求参数,query/body,需要加一个data,如果请求头不是默认的content-typeapplication/json,此时就需要head{
‘Content-Type’: ‘application/x-www-form-urlencoded’,//举例
},
其余的目前没有接触过,不是很常用

2.addition

request的第二个参数对象,传入base:test | main(测试环境和正式环境做出了区分);

image.png

Query参数

image.png
image.png
封装为data对象

Body参数

image.png
image.png


Query参数和Body参数的主要区别不仅在于它们在HTTP请求中的位置,还在于它们的用途和适用的HTTP方法。

  1. Query参数(Query String Parameters)
    • Query参数通常附加在URL的末尾,并以?开始,多个参数之间通过&符号分隔,例如:/api/items?category=books&price=10
    • 它们主要用于GET请求,用于过滤、排序或指定特定的请求数据。
    • 在GET请求中,数据是公开的,可见的,这意味着任何人都可以在URL中看到这些参数。
    • 它们不适合传递敏感信息,因为它们可能会被保存在浏览器历史、服务器日志、或其他地方。
  2. Body参数(Body Parameters)
    • Body参数包含在HTTP请求的正文(body)中,对于外部不可见。
    • 它们主要用于POST和PUT请求,用于发送要被服务器处理的数据(例如,创建或更新资源)。
    • Body可以包含不同格式的数据,如application/jsonapplication/x-www-form-urlencoded等。
    • 适合传递更大的数据量和敏感信息,因为它们不会显示在URL中。

虽然query参数通常与GET请求一起使用,而body参数通常与POST或PUT请求一起使用,但这并不是严格的规则。有些情况下,例如在使用POST请求进行复杂搜索时,你可能会看到query参数和body参数同时使用。
简而言之,两者的主要区别在于它们的用途(query参数更多用于指定资源的检索,body参数更多用于传递资源数据),以及它们在HTTP请求中的位置。

3.globalFilter

image.png
/ BaseURL插入过滤器 */
取了option里的url和addition的base,自动的对于不同环境(正式环境,测试环境,mock环境,失物招领环境)的不同请求路径做出了区分;
/
Auth过滤器 */
过滤器会向请求的 header 中添加一个 token 属性,这个 token 来自 AuthModule。这通常用于身份验证。

4.pendingCacheQueue

1.返回缓存中的promise

pendingCacheQueue 是一个 Map 对象,用于缓存正在进行的请求。这可以通过缓存键(cacheKey)来实现对相同请求的快速响应,避免重复发送相同的网络请求。
键存string(这里是option对象的Json化后的字符串cacheKey)和值存promise请求的一个Map,
先根据cacheKey去取对应的promise,如果非空那就返回的是缓存里的Promise。否则进入常规的请求任务,(过滤器->网络请求->拦截器->全局请求异常处理)
image.png
image.png

2.常规的请求流程(过滤器->网络请求->拦截器->全局请求异常处理)