Version 11 (modified by azazel, at 2009-02-21T01:38:21Z) (diff) |
---|
Extension Development
Tahoe has a programmatic API which enables building custom applications on top of the storage infrastructure. This RESTful interface uses HTTP, so extensions can be implemented as separate processes across a network.
- The docs/frontends/webapi.txt document shows how to control a Tahoe node programmatically.
Extension Projects
None known yet...
Extension Implementation Issues
Caching Tips
Tahoe URIs may refer to either immutable or mutable content. URIs for immutable data are simple to cache by mapping the URI to the contents.
Mutability is independent of read-only capabilities. A read-only capability may refer to mutable content (i.e. *you* can't write to it, but somebody else might be able to).
To determine the mutability of a URI, parse the second field of the URI (delimited by ':'):
- URI:CHK:... : immutable
- URI:LIT:... : immutable
- URI:SSK:... : mutable, writable
- URI:SSK-RO:... : mutable, not writable
- URI:DIR:... : mutable, writable
- URI:DIR-RO:... : mutable, not writable
Note: Currently most files are immutable, and all directories are mutable, but in the future the node type (file or directory) and the mutability will be independent. It's a bad idea to rely on the node type to determine mutability.
HTTP methods
The api relies on four HTTP methods defined as per the standard GET, POST, PUT, and DELETE, which map intuitively to storage operations.
Although these are standard HTTP methods, some clients do not offer good support for them.
- The following clients are known to support all methods:
- curl is an open source client which supports arbitrary methods with the '-X' option.
- Python 2.5's stdlib modules (httplib, urllib) provide good support for arbitrary methods.
- The following clients do not seem to support either PUT and DELETE:
- ...
- We have not yet determined if the following have support for arbitrary methods:
- Common web browsers. In general, HTML forms can only cause GET and POST operations. Javascript might have more abilities.
Race Conditions
Race conditions commonly exist in programs which use traditional directory structure interfaces. The webapi.txt document describes how to avoid many of these situations by relying on file URI's, instead of their vdrive names.