-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ETag #88
Comments
Etags are defined as:
Source: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag While the content of Etags are not standardized and can contain anything, different implementations in the wild are using the last modified timestamp, the content hash, inode data, content size and similar identifiers. Many implementations combine them and hash this result. Hashes might be returned as base encoded strings. Etag collisions between multiple versions of the same resource on a server should not happen at all, but might be still present even with a really small chance. Implementation requirementsThere are multiple questions and takeoffs to consider:
Implementation detailsThese are the current ideas for the actual implementation:
Implementation details, especially the exact byte representation, might be changed. Furthermore the exact process must not be forward compatible, as clients should not try to extract any data from the Etag. It might be benefitial to use some sort of salt or seed for the hashing algorithm, which is static for one specific API instance. This would support a feature where changing the salt/seed will result in different Etags when newly computed. Might be used in combination with the Etag expire command. |
Some assertions within the test |
Implement the Etag header (based on timestamp) for most data returning endpoints (elements, token, file).
Tasks:
Etag
header to the following endpoints:GET /
GET /<uuid>
GET /<uuid>/parents
GET /<uuid>/children
GET /<uuid>/related
general.etag.create-node
: Check that creating nodes resets Etags for related elements.general.etag.create-normal-relation
: Check that creating normal relations resets Etag for the start and end nodes, related endpoints only.general.etag.create-owns-relation
: Check that creating owns relations resets Etags for the start and end nodes, related and children/parents endpoints only.general.etag.delete-node
: Check that deleting nodes resets Etags for related elements.general.etag.delete-normal-relation
: Check that deleting normal relations resets Etags for start and end nodes, related endpoints only.general.etag.delete-owns-relation
: Check that deleting owns relations resets Etags for start and end nodes, related, children and parents endpoints only.general.etag.update-node
: Check that updating a node resets Etags of all related elements.general.etag.update-normal-relation
: Check that updating a normal relation resets Etags of the start and end nodes, limited to related endpoints.general.etag.update-owns-relation
: Check that updating an owns relation resets Etags of the start and end nodes, limited to related, children and parents endpoints.general.etag.maximum
: Check that no Etags are calculated for collections with more than 100 nodes.etag:expire-cache
to expire all Etags currently saved in Redis.The text was updated successfully, but these errors were encountered: