https://github.com/fny/node-firebase-rest
Firebase REST Client for Node.js
https://github.com/fny/node-firebase-rest
Last synced: about 1 year ago
JSON representation
Firebase REST Client for Node.js
- Host: GitHub
- URL: https://github.com/fny/node-firebase-rest
- Owner: fny
- Created: 2016-05-22T23:00:51.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-06-02T16:22:14.000Z (about 10 years ago)
- Last Synced: 2025-03-25T03:51:14.264Z (about 1 year ago)
- Language: TypeScript
- Size: 35.2 KB
- Stars: 11
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Firebase REST Client for Node :fire:
[](https://travis-ci.org/fny/node-firebase-rest) [](http://badge.fury.io/js/firebase-rest) [](https://david-dm.org/fny/node-firebase-rest)
- Query support with proper JSON encoding.
- Requests with the [WHATWG Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) via [node-fetch](https://www.npmjs.com/package/node-fetch).
- You can bring your own Promise library with `FirebaseREST.setPromise(Promise)`.
- Typescript (if you're into that.)
## Installation
```
npm install firebase-rest --save
```
## Usage
```javascript
// Don't forget `.default` at the end! (We use ES6 modules from the future.)
const FirebaseREST = require('firebase-rest').default;
```
Instantiate either the `FirebaseREST.JSONClient` or the `FirebaseREST.Client`, and start making calls. What's the difference?
- `JSONClient` promises a Fetch-like response where the `#body` is parsed JSON
- `Client` promises a standards compliant Fetch response
Confused yet? This `#get` example should make the difference clear:
```javascript
// First instantiate a client with any default query parameters such as auth
var standardClient =
new FirebaseREST.Client('https://app.firebaseio.com', { auth: 'SECRET' });
var jsonClient =
new FirebaseREST.JSONClient('https://app.firebaseio.com', { auth: 'SECRET' });
// Then start making requests
standardClient.get('/')
.then(res => res.json())
.then(json => /* do something with the json */);
jsonClient.get('/')
.then(res => /* do something with the res.body */);
```
If you're still confused, see "`Client` vs `JSONClient`" below for a deep dive.
You can make the following requests with either client:
```javascript
// Reading data (GET)
client.get('/path');
client.get('/path', additionalQueryParams);
// Writing data (PUT)
client.put('/path', payload);
client.put('/path', payload, additionalQueryParams);
// Updating data (PATCH)
client.patch('/path', payload);
client.patch('/path', payload, additionalQueryParams);
// Pushing data (POST)
client.post('/path', payload);
client.post('/path', payload, additionalQueryParams);
// Removing data (DELETE)
client.delete('/path');
client.delete('/path', additionalQueryParams);
```
- `additionalQueryParams`: Additional URL params to merge with the default params provided (e.g. `{ orderBy: '$value', limitToFirst: 2 }`, `{ shallow: true }`.)
- `'/path'`: Path to a part your DB, no `/` required.
- `payload`: Object to write to Firebase
`FirebaseREST` also provides aliases to match the semantics of the official Firebase JavaScript library:
```javascript
client.set === client.put; // => true
client.update === client.patch; // => true
client.push === client.post; // => true
client.remove === client.delete; // => true
```
## `Client` vs `JSONClient`
You can see the differences when comparing two GET requests. TLDR, you probably want to use `JSONClient`: it's supremely convenient.
```javascript
//
// Standard Client
//
const responsePromise = client.get('/').then(res).then(console.log);
// => Body {
// url: 'https://app.firebaseio.com/.json?auth=SECRET',
// status: 200,
// statusText: 'OK',
// headers: Headers { ... },
// ok: true,
// body: PassThrough { ... },
// ... }
responsePromise.then(res => res.json()).then(console.log);
// => { db: 'contents' }
//
// JSON Client
//
jsonClient.get('/').then(console.log);
// => JSONResponse {
// url: 'https://app.firebaseio.com/.json?auth=SECRET',
// status: 200,
// statusText: 'OK',
// headers: Headers { ... },
// ok: true
// body:
// { db: 'contents' }
```
## More Documentation and Examples
See the source and the specs. There be hidden treasure.