Here's the latest patch: http://codereview.appspot.com/33058

-Lane

On Fri, Apr 3, 2009 at 1:32 PM, Scott Seely <[email protected]> wrote:

>  Line 603 | 611 | 624 | 639 | 666 : We should show a check for errors
> prior to investigating result.[value]. People cut and paste this code all
> the time. Error checking shouldn’t be confusing in the spec. It could be as
> simple as adding
>
> if (!result.error){/*existing code*/}
>

good suggestion...added

>
>
> Functions section (starting at 676): Each method that takes optional
> parameters should have an <xref> to where the optional parameters are
> defined. Also, do any examples show how to pass in the optional parameters
> (I didn’t see any)? If not, please add examples.
>
 I kept the simple examples and added some that show more optional
parameters

>
>
> Line 680: “Takes an optional. set" should be “Takes an optional set”
> (delete the period after optional)
>
nice catch...fixed

>
>
>
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Lane
> LiaBraaten
> *Sent:* Friday, April 03, 2009 1:16 PM
>
> *To:* [email protected]
> *Cc:* [email protected]
> *Subject:* [opensocial-and-gadgets-spec] Re: OS Lite (OSAPI) spec doc
>
>
>
> Here's the next pass: http://codereview.appspot.com/33058
>
> On Fri, Apr 3, 2009 at 1:04 PM, Scott Seely <[email protected]>
> wrote:
>
> Yes to the eref.
>
>
>
> I’m a bit concerned about the lack of parity between the JSON-RPC and osapi
> for album, mediaitem, and messaging. Osapi and JSON-RPC are closely related.
>
>
>
>
> I’m fine with leaving these undefined until v.next. Please post when you
> are complete and I’ll give this another pass.
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Lane
> LiaBraaten
> *Sent:* Friday, April 03, 2009 11:52 AM
>
>
> *To:* [email protected]
> *Cc:* [email protected]
> *Subject:* [opensocial-and-gadgets-spec] Re: OS Lite (OSAPI) spec doc
>
>
>
> Thanks for the review, Scott.  I synced up with Bob to address the open
> issues on this thread.  I'm working on an updated patch, but in the mean
> time, comments inline...
>
> -Lane
>
> On Fri, Apr 3, 2009 at 9:59 AM, Scott Seely <[email protected]>
> wrote:
>
> Based on my review, this is still a work in progress. I do not guarantee
> that this is a complete list of spec issues. These are simply the issues
> that seem to be the most evident.
>
>
>
> Missing from spec:
>
> Messaging
>
> Albums
>
> MediaItem
>
> I think we should move these to v.next
>
>
>
> Line 588: “Highlights” is really a section. Please change from <t> to
> <section title="Highlights">
>
>  fixed
>
>
>
> Line 600: Please strike. This is a sentence that occurs in the discussion
> of why you included the examples early. It is not needed for the spec.
>
>  removed
>
>
>
> Line 601: “A Person request, the most basic example” should be moved into
> the <figure> tag as:
>
>                 <figure>
>
>                                 <preamble>A basic Person Request</preamble>
>
>
>
> Line 609 & 618: Move content inside /figure/preamble tag
>
>  fixed here and in a couple other places as well
>
>
>
> Line 631 Move this to Highlights list: Batch calls can be cascaded.
>
> Maybe I’m old school, but it seems that the correct term is
> “chained|chaining”? Suggested edit when moving to Highlights (near line 588)
>
> “Batch calls are designed for call chaining.”
>
> The examples demonstrate this concept adequately.
>
>  Moved to highlights list and changed to 'chaining'.
>
>
>
> Line 635. Please strike “This is a short namespace, so it's easier to type,
> and it is different from the existing apis so that they can coexist until
> the old apis  are removed.” I don’t believe that this statement enhances the
> spec. Line 586 already addresses deprecation.
>
>  removed
>
>
>
> Line 648: “When the Gadget server renders the osapi library, it calls the
> SystemHandler's list Methods endpoint, and adds the available services.”
>
>                 ‘it’ is ambiguous.
>
> SystemHandler is a new term. I believe that this may be a Shindig type, not
> something that is actually part of the system.
>
> Line 648 contains a TODO: “The js client then uses this to generate (TODO
> Not implemented yet)”. The document here MUST NOT refer to TODOs in any
> given implementation. The document MUST NOT contain TODOs for feature
> descriptions. I’m not sure which case the TODO refers to, but the TODO needs
> to disappear and be rectified.
>
>  removed implementation details (and TODO). The paragraph now reads:
>
> The features available on the client are determined by the server from
> which the JavaScript is delivered. The server SHOULD generate service
> methods for all available services. Developers wanting to write gadgets
> safely can test for the existence of a service and method before making
> their call.
>
> [example follows...]
>
>
>
>
>
> Line 661: Define behavior of <Require feature="osapi" />
>
>
>
> Line 662 | 682 | 698 | 715 | 735 | 750 | 775
>
>                 Why are we defining subsets of the feature? Osapi should be
> a single feature, introducing the basic APIs around Activities, People,
> AppData. The extra granularity seems to be new and unnecessary. I fail to
> see the benefit of the extra knobs.
>
>  Let's just use feature="osapi" for v0.9.  We can revisit sub-features
> later, but at this point it doesn't seem to provide much benefit.
>
>
>
> Line 662: “that map to the activities endpoint” should be “that map to the
> people endpoint”. Need precise definition of what the endpoint is. Probably
> need a cross reference to the spec where the endpoint for each item is
> defined
>
>  will do...this is an eref tag, right?
>
>
>
> Line 666 | 667 | 668 | 669: You repeat “convenience” 2x. Delete the ‘Note’
>
>  removed the duplication
>
>
>
> Line 682 | 698: Need precise definition of what the endpoint is. Probably
> need a cross reference to the spec where the endpoint for each item is
> defined
>
>  will do.
>
>
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Lane
> LiaBraaten
> *Sent:* Thursday, April 02, 2009 9:45 PM
> *To:* [email protected]
> *Cc:* [email protected]
> *Subject:* [opensocial-and-gadgets-spec] Re: OS Lite (OSAPI) spec doc
>
>
>
> oops - here's the patch: http://codereview.appspot.com/33058
>
> On Thu, Apr 2, 2009 at 9:42 PM, Lane LiaBraaten <[email protected]>
> 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 <[email protected]> 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
>
>  I'm going to take osapi.base out of the spec for v0.9
>
>
>
> - 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
>
>  will add central documentation about "Request objects" (which have
> execute() methods) and "Batch Request objects" (which have execute() and
> add() methods)
>
>
>
> -  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
>
>  goodbye osapi.ui
>
>
>
> - 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
>
>  Bob thinks he can get delete() to work...if not, we'll use remove()
>
>
>
> - " 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
>
>  see commnet above about documenting "Batch Request objects"
>
>
>
> - 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
>
>  Let's punt on this for now...I don't think many developers will use it
>
>
>
>
> -  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
>
>  I'm planning to create methods for head, get, put, post, delete
>
>
>
> - 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
>
>  I think we can get rid of the ui namespace.  I agree that we should
> operate under the assumption that any js call can be ui-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 <[email protected]> wrote:
> >
> > The URL:  http://wiki.opensocial.org/index.php?title=OSAPI_Specification
> >
> > On Mon, Mar 30, 2009 at 12:01 PM, Bob Evans <[email protected]> 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
> [email protected]
> To unsubscribe from this group, send email to
> [email protected]<opensocial-and-gadgets-spec%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/opensocial-and-gadgets-spec?hl=en
> -~----------~----~----~----~------~----~------~--~---
>
>

Reply via email to