oops - here's the patch: http://codereview.appspot.com/33058

On Thu, Apr 2, 2009 at 9:42 PM, Lane LiaBraaten <lliab...@google.com> wrote:

> I created a spec patch for the OSAPI stuff, but I didn't realize Bob hadn't
> incorporated Adam's comments yet.  I made a few changes, but some of these
> we still need to finalize.  My comments inline.
>
> -Lane
>
> On Tue, Mar 31, 2009 at 10:10 AM, Adam Winer <awi...@gmail.com> wrote:
>
>>
>> Comments:
>>
>> - At this stage, we really need spec updates in the form of diffs to
>>
>> http://opensocial-resources.googlecode.com/svn/spec/draft/Opensocial-Specification.xml
>> .
>>  I kinda wish we'd split this huuuge doc into multiple smaller docs,
>> as the XSLT transform hangs Firefox for awhile, but that should be its
>> own spec diff.
>>
>> - osapi.base should largely be undocumented, and I'm not sure it
>> should exist as a feature name, though I could be convinced otherwise.
>
> no change ... I'm not clear on this so I don't have an opinion right now
>
>>
>>
>> - if (osapi.people.getViewer) {
>>  should be
>>  if (osapi.people && osapi.people.getViewer) {
>>  since you have to test for both the service and the method.
>
> fixed
>
>>
>>
>> - "When no parameters are specified, the server defaults will be used:
>> { user : @me, group : @self}. This is built on
>> osapi.newJsonRequest()."
>>   Two notes.  It's userId: @me, groupId: @self.  And what it's built
>> on is an implementation detail that the spec should leave out.
>
> fixed
>
>>
>>
>> - osapi.people.get.execute(callback)
>>  isn't a great description, since there is no such function on
>> osapi.people.get.  Need some central documentation describing the
>> execute() method on all request and batch objects
>
> no change - not sure what the change should be here
>
>>
>>
>> -  osapi.activities.create(params) - maps to the activities create
>> endpoint. This is a non-ui intermediated version of the
>> osapi.ui.requestCreateActivity call.
>>  I think the distinction between UI-intermediated calls and
>> non-UI-intermediated calls is artificial.  A container may make *any*
>> JS call ui-mediated - permission dialogs being the obvious example.
>> Strongly prefer if we:
>>   (1) Kill requestCreateActivity(), and for that matter everything in
>> osapi.ui
>>   (2) Leave UI mediation up to the container, in particular use
>> activities.create() instead of requestCreateActivity()
>>   (3) If we have time, build the message service API for the
>> requestSendMessage()/requestShareApp(), if not leave that for v.Next
>>   (4) Don't bother with requestPermission() in this API, though that
>> opinion is 99% based on experience with a few containers, and other
>> container developers may have very different feedback.
>
> no change, but I'm +1 on these comments
>
>>
>>
>> - osapi.appdata.deleteData
>>  Since JS prevents us from just calling this "delete", I'd rather
>> call it "remove()", which is at least a predictable naming pattern.
>> Or "deleteAppdata()".
>
> no change, but I'm +1
>
>>
>>
>> - " osapi.messages TODO"
>>  I think this means it's not in 0.9.
>
> removed
>
>>
>>
>>    *  osapi.newBatch() - returns a new osapi.base.batch request.
>>    * osapi.base.batch.add(key, request) - Adds a service request to
>> the batch associated with the specified key. These may be jsonrpc
>> calls, such as osapi.people.get(), or osapi.makeRequest calls to third
>> parties, or a mixture of the two.
>>    * osapi.base.batch.execute(callback) - executes all of the
>> requests in the batch. Callback is passed a JSON object mapping each
>> request key to a JSON response object.
>>
>> Don't doc that batches are in "osapi.base.batch".  All we need to doc
>> is that batch objects have add() and execute() methods.
>
> no change, I think this makes sense though, esp if we take out the
> osapi.base docs
>
>>
>>
>> - Batch functions:"
>>
>> One thing I would recommend adding is tweaking osapi.newBatch() to be:
>>  osapi.newBatch(opt_json)
>> ... where opt_json is a JSON array describing a full request.  This
>> lets developers that are truly fluent with JSON-RPC write:
>>  osapi.newBatch([{method: "people.get"} ... etc...]).execute(callback);
>> ... and done.
>
> no change, seems reasonable
>
>>
>>
>>
>> -  osapi.makeRequest
>>  This should be consistent with everything else in osapi, not with
>> gadgets.io.  I think the right API is to follow Data Pipelining:
>>
>>   osapi.http.get(params)
>>   osapi.http.post(params)
>>
>>   (and any other HTTP methods we care to specify at this point).
>> "params" should exactly match the attributes on os:HttpRequest, and
>> must use the same data format returned by os:HttpRequest (which I
>> haven't specified yet, I will send out that today).  It also shouldn't
>> mention that it uses gadgets.io.makeRequest().
>
> no change, but I like it
>
>>
>>
>> - osapi.ui:
>>
>>  As said above, I think this needs to be killed, as ui-mediated is up
>> to the container, not the spec.  Batching semantics get a little
>> tricky, but we're far better off supporting batching for ui-mediated
>> requests than not, because it gives the container a lot more
>> flexibility for good UIs - instead of showing 5 dialogs in succession,
>> the container can show a single dialog saying the gadget's trying to
>> do 5 things.  For now, we can leave the batch semantics up to the
>> container, as I can come up with a variety of plausible semantics.
>>
>> Also, everything else is method(params).execute(callback), and there's
>> no reason to break down and use positional parameters here.
>
> no change - the ui namespace does seem strange since there's nothing that
> says the container *has* to make these calls user-mediated
>
>>
>>
>> - osapi.base:
>>
>>  I don't think any of these need to be documented.  If containers
>> offer additional service methods, it's up to containers to support
>> getting those methods into osapi.  The SystemHandler method you
>> describe above is reasonable.
>
> no change.  I don't fully understand this, but if containers don't need to
> be consistent on the osapi.base namespace, then we can leave this out
>
>>
>>
>> - Error Handling:
>>
>>  I like the pattern of using and propagating "error" through the
>> structures.  A big +1, as it's simple and clear.  That said, the doc
>> needs to be explicit that:
>>    - "error" may not be used as a key to batch.add().
>>    - "error" is reserved and may not be used as a property of a JSON
>> RPC batch response item.
>
> fixed
>
>>
>> Also, when the doc says "The error handling works exactly as it does
>> for the JSONRPC interface, since this api is based on that protocol."
>> that's not true.  In JSON-RPC, a network error means that you get a
>> JSON structure with just an error:
>>  {error: {message: "", code: ""}}
>> ... without any per-request-item content.  What you're doing - which I
>> like - is creating dummy response items at each key and copying the
>> network error into each response item.
>
> no change  - not sure how to update
>
>>
>>
>> In "Example: Processing any sub requests in the batch that succeeded:
>> ", the example is incorrect.  We don't have an error property within
>> each returned activity, since all activities are in a single request.
>> We need an example like:
>>
>> var batch = osapi.newBatch().
>>    add('v', osapi.people.getViewer()).
>>    add('vf', osapi.people.getViewerFriends());
>>
>> batch.execute(function(result) {
>>  for (var name in result) {
>>    if (result.hasOwnProperty(name)) {
>>      if (result[name].error) {
>>        gadgets.log("Found an error: ", result[name].error.message);
>>      } else {
>>        gadgets.log("Got some data: ", result[name]);
>>      }
>>    }
>>  }
>> });
>
> fixed
>
>>
>>
>>
>> On Mon, Mar 30, 2009 at 12:15 PM, Bob Evans <bobev...@google.com> wrote:
>> >
>> > The URL:
>> http://wiki.opensocial.org/index.php?title=OSAPI_Specification
>> >
>> > On Mon, Mar 30, 2009 at 12:01 PM, Bob Evans <bobev...@google.com>
>> wrote:
>> >> Hi,
>> >>
>> >> I have updated the OS Lite spec doc to match the current
>> >> implementation (there is a follow on patch coming today with the
>> >> metadata-based discovery of service methods).
>> >>
>> >> Known issues:
>> >>
>> >> * requestCreateActivity and activities.create. It might be possible to
>> >> make all calls ui-interruptible, but this prevents batching, well,
>> >> it makes batching a lot stranger and more involved. For example, what
>> >> happens if I have a batch where 2 of 4 calls require UI interaction
>> >> with the user. It's do-able, but would require a lot more thought than
>> >> .9 allows, I think. My proposed solution keep requestX methods, and
>> >> discuss making all service calls ui-intermediable in the next version
>> >> spec discussion.
>> >>
>> >> * send vs execute vs call naming. I prefer execute, but if people want
>> >> a shorter name, then send seems good. Some have suggested call as a
>> >> name, but this is used in the language, so seems like a bad idea.
>> >>
>> >> * Rename osapi.makeRequest to osapi.http.get/post. To me, makeRequest
>> >> reflects the existing, underlying gadgets calls, but I could see
>> >> making it http.
>> >>
>> >> * osapi.ui namespace is weird, better suggestions?
>> >>
>> >> * Should we have a bucket of params for the requestX calls, or
>> >> positional params as it is now? Maybe all of this is obviated if we
>> >> make the requestX calls be jsonrpc calls.
>> >>
>> >>
>> >> Thanks,
>> >> Bob
>> >>
>> >
>> > >
>> >
>>
>> --~--~---------~--~----~------------~-------~--~----~
>> You received this message because you are subscribed to the Google Groups
>> "OpenSocial and Gadgets Specification Discussion" group.
>> To post to this group, send email to
>> opensocial-and-gadgets-s...@googlegroups.com
>> To unsubscribe from this group, send email to
>> opensocial-and-gadgets-spec+unsubscr...@googlegroups.com<opensocial-and-gadgets-spec%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/opensocial-and-gadgets-spec?hl=en
>> -~----------~----~----~----~------~----~------~--~---
>>
>>
>

Reply via email to