Comments (4)
@caseycrogers, you said in the comments for #54 that
As for your interest in adding low-level access to ETags-this seems reasonable to me. However, there is a caveat:
As-is, the ETag of a given value at one path in the database will be the same as the ETag of the same value at any other path.
Additionally, the ETag of values will not change with time. However, we do not document these two properties and do not guarantee that EITHER of them will remain true in the future. As such, we strongly discourage developers from fetching ETag values and then saving them to be used with later transactions at the same or different locations.
I don't think that this is a problem in the case of caching. If the data is the same, and hence the ETag is the same, then the cache is not stale. Also, it does not matter here if the ETag does not change as a function of time (I would certainly think that we would not want it to!)
from firebase-admin-python.
By change as a function time I mean that in the future we may choose to change our algorithm for producing ETags. We have no such plans at the moment but want to keep the option open for ourselves.
For caching it should be fine. Another note that you might find very helpful-while implementing the conditional requests logic I also implemented full support for the if-none-match header. However, since this feature was well out of scope of the project (allowing transactions in REST) we decided to keep the functionality but not document it. If you're doing any caching related stuff I highly recommend you use if-none-match.
It may be even worthwhile to add under-the-hood caching functionality with if-none-match to this library's default GET implementation. Preferably with a flag to turn it on or off.
Requests for non-stale data in the cache would incur one round trip (to verify the cached value) and minimal bandwidth. Stale data would require two round trips and slightly higher bandwidth than just a single standard GET.
from firebase-admin-python.
Just submitted a pull request for this. I think I'll hold off on the under-the-hood caching for now, as that seems like it'll be pretty complicated.
from firebase-admin-python.
I will resolve this, since get(etag=True)
and set_if_unchanged()
are already implemented and released. I also just sent out #73 to add the get_if_changed()
method. Thanks @alexanderwhatley for all your hard work on getting this implemented, and thanks @caseycrogers for all the help.
from firebase-admin-python.
Related Issues (20)
- Couldn't import app_check HOT 1
- Firebase functions container silently freezes on making a get request to Firestore if multiple requests were created before container starts HOT 3
- Call to Firestore getting timed out from the docker container. HOT 1
- Querying Firestore documents by nested key-value in an array field using Python HOT 1
- firestore times out when using default DNS resolver HOT 1
- [FR] Async `messaging` requests HOT 1
- import firebase admin HOT 3
- Using cloud run from gcp console to firebase HOT 1
- Cloud run from gcp console HOT 2
- [FR][FCM] HTTP2 support for sendEach HOT 9
- [FR] Change the firestore db in firestore.client. HOT 1
- Datastore emulator causes firebase admin to hang HOT 2
- Realtime Database Listener Crashes on Internet Disconnection HOT 1
- Better Error handling for empty token list in Messaging send_each_multicast HOT 1
- Documentation: API Reference not available HOT 1
- Connection aborted in google/oauth2 affecting firebase HOT 1
- verify_token() got an unexpected keyword argument 'clock_skew_in_seconds' HOT 1
- Add google/microsoft providers for a tenant using python library
- Please fix
- Message.data must be a dictionary. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from firebase-admin-python.