如何发起Firestore REST API PATCH请求并获取对应文档路径?
1. 构造请求URL
你已经调试通的GET请求对应文档的路径可以直接复用,按你拿到的PATCH格式替换占位符即可:
- 替换
{project_id}:和你GET请求里的YOUR_PROJECT_ID一致,为你的Firebase项目ID - 替换
{database_id}:使用默认数据库的场景填(default)即可 - 替换
{document_path}:为目标文档的相对路径,你要修改cities集合下的LA文档的话,这里填cities/LA - 替换
updateMask.fieldPaths后的取值:为你要修改的字段名,比如你数据库的单个字段叫city_name,这里就填city_name
举个实际示例,假设你的项目ID为test-project-123,要修改cities/LA文档的city_name字段,最终的请求URL为:https://firestore.googleapis.com/v1/projects/test-project-123/databases/(default)/documents/cities/LA?updateMask.fieldPaths=city_name
2. 构造请求体
请求体需要按Firestore的类型规范编写,不同字段类型对应不同的key:
- 字符串类型对应
stringValue - 整数类型对应
integerValue - 布尔类型对应
booleanValue
比如要将city_name字段的值修改为Los Angeles,请求体如下:
{ "fields": { "city_name": { "stringValue": "Los Angeles" } } }
3. 补充请求头
和GET请求逻辑一致,请求头中需要添加认证信息:Authorization: Bearer 你的有效访问令牌,否则会触发权限报错。
文档路径获取方法
文档路径和你GET请求路径末尾的集合+文档层级完全一致,也可以直接在Firestore控制台查看:打开控制台找到对应的集合,再选中目标文档,路径就是集合名/文档名,如果有子集合的话按层级拼接即可,比如cities/LA/streets/5th对应cities集合下LA文档的子集合streets里的5th文档。
补充说明
如果需要同时修改多个字段,在URL后追加多个updateMask.fieldPaths参数即可,比如要同时修改city_name和population两个字段,URL参数部分为?updateMask.fieldPaths=city_name&updateMask.fieldPaths=population,请求体的fields字段内同步添加两个字段的配置即可。
内容的提问来源于stack exchange,提问作者angrybird

