网络请求
与后台通讯有 4 个方法,get
, post
, put
, del
,这些方法是对 fetch
的简单封装。
restful 规范定义了各种方法的用途,但 ReactGO 并不要求严格遵守这些规则, 因为前后端都是你控制的,使用哪个方法由你自己决定,但是参考 restful 总是有意义的。
所有上面的方法在 src/rest.js
文件中定义。
put
和 post
的用法一样,get
和 del
的用法一样。
get
和 del
不能有 body,但是可以带 query 参数(?xx=yy&cc=dd
这样的)。
可能你关心 query 参数重包含敏感信息是否安全,简单的回答是"是的,https 会保护 query 字符串",
详细的回答可以参考这里:https://https.cio.gov/faq/
提交数据
提交数据使用 URLSearchParams
作为 body,如下。
import { put } from "~/rest";
try {
await put('path', new URLSearchParams({
a: 1, b: 2, c: 3
}));
} catch (err) {
enqueueSnackbar(err.message, { variant: 'error' });
}
上传文件
上传文件使用 FormData
作为 body,如下。
try {
const form = new FormData();
form.append('avatar', blob, 'file.png');
await put('path', form);
} catch (err) {
enqueueSnackbar(err.message);
}
预定义行为
如果服务器响应 401
(Unauthorized),那么会自动弹出一个 认证失败,请重新登录
的提示,然后跳转到登录页面。因为服务器只有在认证失败的情况下才会响应 401,在开发后台代码时,
需要遵守这一约定。