There's really no need to assume anything, /people/@me/@self is a single
entity and can never be more then one result.

Hence filtering is a bit silly, what exactly would you want to filter on,
what would be the use-case for wanting to know a viewer *only if
<condition>* ?

The only situation in which /people/@me/@self returns an error is when your
using 2 legged OAuth (or anonymous read access is allowed), in which case
the securityToken's getViewer() will throw an exception since @me can't be
resolve to an ID in those situations.

In every other situation, getViewer() returns an id, which is used to
resolve @me/@self to a single user record, which is not really filterable,
since filtering only makes sense on collections, right?

On Fri, Feb 13, 2009 at 1:52 PM, Ian Boston <[email protected]> wrote:

> Can I unwind this a little please.
>
> The original patch for 904 was to introduce a change the SPI for getPerson
> with filtering.
> I argued that getPeople already provides the filtering so there was no need
> for a SPI change.
> Ben pointed out that the REST response would then be a collection which
> exposed a tension in the spec.
>
> Did I get that right?
>
> Lets assume for a moment that the output of the current servlet *is*
> correct (ie not a collection)
>
> having called getPeople check the response and emit a 404 if there are 0
> entries and the only entry if there is 1 (there should not be more than 1 as
> a result of the filter). Obviously the Future needs to be wrapped to
> evaluate this when its needed and not before.
>
> Does that make sense?
>
> I think if they current servlet is not correct then that needs sorting out
> separately, but I see emails on this thread stacking up faster than I can
> type or think or answer the phone.
>
> Ian
>
>
> On 13 Feb 2009, at 12:36, Chris Chabot wrote:
>
>  On Fri, Feb 13, 2009 at 1:27 PM, Ben Smith <[email protected]>
>> wrote:
>>
>>  On 13 Feb 2009, at 12:09, Chris Chabot wrote:
>>>
>>> '@self' is not a collection by any definition of the word, it's a single
>>>
>>>> object, hence the lack of the collection (and the lack of filtering,
>>>> there
>>>> is only one 'self' and that's the viewer :)
>>>>
>>>> The same goes for activities, a query on /activities/@me/@self returns a
>>>> collection of activities (since it can contain 0, 1 or many results),
>>>> however /activities/@me/@self/<activityId> can only return 0 or 1
>>>> results,
>>>> so it returns an activity record and not a RestfulCollection.
>>>>
>>>>
>>> But that's not what the spec says should happen: If the request is
>>> specifically for a single contact (e.g. because the request contains
>>> Additional Path Information like /@me/@all/{id} or /@me/@self), then
>>> entry
>>> MUST be an object containing the single item returned (i.e. "entry": [ {
>>> /*
>>> first item */ } ] and "entry": { /* only item */ } respectively).
>>>
>>> Unless I'm reading it wrong, /@me/@self should still return
>>> <response><entry><person></person></entry></response>
>>>
>>
>>
>>
>> There are 2 parts to the definition:
>>
>> 1) if the request could possibly return multiple items (as is normally the
>> case), this value MUST always be an array of results, even if there
>> happens
>> to be 0 or 1 matching results
>>
>> if something could return multiple entries it has to be a collection,
>> however /@me/@self is a single entry, so this doesn't apply here
>>
>> 2) If the request is specifically for a single contact (e.g. because the
>> request contains Additional Path Information like /@me/@all/{id} or
>> /@me/@self), then entry MUST be an object containing the single item
>> returned
>>
>> So if the query is for /@me/@self it *MUST be a single entry.*
>>
>> I think your either confused and consfusing /@me/@self with /@me/@all
>> (which
>> is an PortableContacts way of saying /@me/@friends), or your a believer in
>> possessions and believe that our definition of a person being a singular
>> entity is wrong and the spec should be changed to allow for multiple
>> spirits
>> and/or demons in one physical body. (And i truly hope that is not what
>> your
>> suggesting :)
>>
>>
>>
>>  I agree that filter...@friends&filterValue=<userId> is confusing, but
>>> filterBy=id&filterValue=<userId> would surely remove all people that do
>>> not
>>> have <userId> as their userId! I guess you really want a filterBy AND
>>> filterOn (or something), or explicitly name filterValue to
>>> filterUserIdValue
>>> (or something).
>>>
>>>
>> Filtering on /@me/@self is confusing, since it's only one record, what
>> would
>> you want to filter on?
>>
>
>

Reply via email to