如何对 Firebase 数据库进行 GET REST API 调用?

Nic*_*ges 3 rest firebase firebase-realtime-database

我有一个简单的 Firebase 实时数据库,如下所示:

我的简单 JSON Todo 数据库

我使用它作为主体通过 PUT 调用创建了它:

[{
      "complete": false,
      "editMode": false,
      "title": "Mow the lawn",
      "id": 26,
      "note": "This is a note for 27"
    },

 {
      "complete": true,
      "editMode": false,
      "title": "Feed the dog",
      "id": 27,
      "note": "This is a note for 27"
    }   
]    
Run Code Online (Sandbox Code Playgroud)

我想创建一个 REST GET 调用以根据 ID(在本例中为 26)获取第一个项目。

我的规则是这样的:

{
  "rules": {
    ".read": true,
    ".write": true,
    "todos": {
      ".indexOn": ["id"]      
  }  
}
}
Run Code Online (Sandbox Code Playgroud)

我试过:

https://<myid>.firebaseio.com/todos/26/id.json
Run Code Online (Sandbox Code Playgroud)

但这又回来了,null因为当然 dang '0' 和 '1' 在那里。

我可以做这个:

https://<myid>.firebaseio.com/todos/0.json
Run Code Online (Sandbox Code Playgroud)

并返回第一项,但是当我这样做时:

https://<myid>.firebaseio.com/todos.json
Run Code Online (Sandbox Code Playgroud)

'0' 和 '1' 没有返回,那么我怎么知道使用它们呢?

你明白我的困惑吗?

我错过了什么?

Fra*_*len 6

Firebase 实时数据库本身不存储数组。相反,它将数组元素存储在顺序键中,从"0".

当您"0"通过 REST API请求带有顺序键的位置/查询时,Firebase 将数据作为数组返回,这就是您在请求时看到的todo.json.

但是您可以通过键来寻址数组中的各个项目,这就是您通过请求todo/0.json.

以上所有内容都通过其完整和绝对路径获取单个节点。但似乎您想要的是通过查询其属性之一的值来检索节点。为此,您需要使用查询

要获取"id"等于的项目26,您可以执行以下查询:

https://<myid>.firebaseio.com/todos.json?orderBy="id"&equalTo=26
Run Code Online (Sandbox Code Playgroud)

由于可能存在下多个子节点todosid等于26,这个回报率这样的节点列表。对于您共享的 JSON:

{
  "0": {
    "complete": false,
    "editMode": false,
    "id": 26,
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)