[rest-practices] Modelling membership
Mark McLoughlin
markmc at redhat.com
Tue May 4 16:29:55 UTC 2010
On Tue, 2010-05-04 at 12:21 -0400, Bryan Kearney wrote:
> On 05/04/2010 10:15 AM, Mark McLoughlin wrote:
> > On Tue, 2010-05-04 at 09:28 -0400, Bob McWhirter wrote:
> >> 3rd resource: "membership"
> >>
> >> Sometimes called an association object.
> >>
> >> In our model, I'm sure we end up with code to pair a User to a Group.
> >> Ta-da! Expose as REST. Adjusting memberships now only affect the
> >> membership object you add or delete, no race conditions of updating a
> >> "list" or "roster" from either User or Group end of things.
> >>
> >> I'd probably veer towards Membership being a top-level object also,
> >> owned by neither User nor Group, but linked to from either, as a
> >> collection of pointers to the actual Membership resources.
> >
> > Nice idea, thanks
> >
> > We'll probably do this as a collection of "attachment" resources owned
> > by a storage domain - each attachment just includes a reference to a
> > data center and the status of the storage domain within that data center
> >
> > I'd prefer this approach to having it toplevel, since it means one side
> > of the relationship is implicit
> >
>
> I like the idea, but if you make it under a top level item, doesn't this
> degrade to /groups/{uid}/user?
By toplevel, I mean "blaa.com/memberships"
So, by not having it toplevel, what we're thinking is equivalent to:
POST /users/1234/memberships
<membership>
<group id="4321"/>
</membership>
HTTP/1.1 200 OK
Location: /users/1234/memberships/1111
<membership>
<user id="1234"/>
<group id="4321"/>
<link rel="self" href="/users/1234/memberships/1111"/>
</membership>
We'll also make the membership list available read-only via the group:
GET /groups/4321
<group id="4321">
<name>foo</name>
...
<memberships>
<link rel="membership" href="/users/1234/memberships/1111"/>
...
</memberships>
</group>
Cheers,
Mark.
More information about the rest-practices
mailing list