如何用Firestore Cloud REST API+Redux Toolkit Query自定义ID创建文档
正确实现Firestore自定义ID文档创建(结合RTK Query)
你之前的问题出在请求方法和API规则不匹配:Firestore REST API里,POST /users是集合级请求,专门用来自动生成ID创建文档;要指定自定义ID创建文档,得用文档级请求,把方法改成PUT而非继续用POST。
修正后的完整代码
const baseQuery = fetchBaseQuery({ baseUrl: "https://firestore.googleapis.com/v1/projects/[project-id]/databases/(default)/documents", }); const userApi = createApi({ baseQuery: baseQuery, reducerPath: "users", endpoints: (builder) => ({ createUserWithCustomId: builder.mutation({ query: (userInfo: RegisterUser) => ({ url: `/users/${userInfo.id}`, // 自定义ID嵌入文档路径 method: "PUT", // 核心改动:替换POST为PUT body: { fields: { email: { stringValue: userInfo.email }, fullname: { stringValue: userInfo.fullname }, trips: { arrayValue: { values: [] } }, // 注意:arrayValue必须嵌套values字段,空数组也要按此格式写 }, }, }), }), }), });
关键细节说明
- PUT方法的作用:PUT是文档级写入请求,目标文档不存在就创建,存在则全量覆盖。如果想避免覆盖已有文档,可在URL后加
?createMask=*参数,此时若文档已存在会返回409冲突错误,防止误操作。 - 数组格式修正:你之前写的
trips: { arrayValue: [] }不符合Firestore REST的格式要求,必须写成{ arrayValue: { values: [] } },否则会触发格式校验错误。 - ID合法性:确保
userInfo.id是合法的Firestore文档ID,不能包含/、\、[、]等特殊字符。
内容的提问来源于stack exchange,提问作者Null Array
相关产品推荐
相关产品推荐

