- From: Robin Berjon <robin@berjon.com>
- Date: Fri, 2 Oct 2009 14:32:41 +0200
- To: public-device-apis@w3.org
Hi all, one issue we have with APIs is also how they are exposed. Say for instance that the Contacts API has a basic interface providing access to the rest of the functionality called "Contacts". We could: 1) Make it available as a constructor: var cs = new Contacts(); var mum = cs.findOne({ nickname: "mum" }); This pollutes the global namespace (since "Contacts" is now a variable in that scope), and is useless since there's no use for multiple instantiation of that class. 2) Make it available as an object already instantiated in the global scope: var mum = contacts.findOne({ nickname: "mum" }); This is nicer, less useless, but still polluting. Given the number of APIs that we have, it's probably a bad idea. 3) Make a way of requesting that an API be "loaded": var mum = loadAPI("contacts").findOne({ nickname: "mum" }); This adds only one item to the global scope (which is acceptable), but isn't idiomatic. 4) Use an object to provide access to all the device APIs: var mum = device.contacts.findOne({ nickname: "mum" }); I think the latter is the cleanest option. Specifying one such extensible object is trivial, and would be a very short specification. Another option is to hang off of the navigator object just like geolocation did — but that seems wrong (I'm not sure why it was chosen there). Thoughts? -- Robin Berjon - http://berjon.com/
Received on Friday, 2 October 2009 12:33:11 UTC