Re: Link Relations
mike amundsen <[email protected]> Thu, 7 Nov 2013 20:08:26 -0500
| Newsgroups | gmane.comp.web.services.rest |
|---|---|
| Message-ID | <CAPW_8m7uaPmcCqhmFq9wrp6qd6jsQK960_e9koJ4z9uOBvPS9g@mail.gmail.com> |
not sure i understand the Q, but i'll offer this: rel="http://example.com/rels/publisher" describes the relationship between the source and the target. now you can describe (or write docs in human form, etc.) how to exploit the relationship using protocols: HTTP.POST === publish the source resource HTTP.DELETE === unpublish the the source resource HTTP.GET === get publishing metadata/status about the source resource or whatever (i made up actions since i don't know your domain model) hope this helps. mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Thu, Nov 7, 2013 at 6:10 PM, Charles Reese <[email protected]>wrote: > Hi Mike, > > Thank you so much! > > I'm still wondering about link rels for state-transitions affecting only > one resource. For example, suppose when creating a playlist, it defaults to > 'private'. I want to turn it public. I could use a link rel like this: > > /rel/playlist/publish > > But again, I'm not using the method as the "verb". How would you handle > this? > > Cheers, > Charles > > > On Wed, Nov 6, 2013 at 7:09 AM, mike amundsen <[email protected]> wrote: > >> Charles: >> >> First, if you use single strings ("edit", etc.) be sure they are >> registered Link Relation Values. Here's a good list of references: >> - IANA [1] >> - microformats [2] >> - Dublin Core [3] >> >> When you *do* use them, be sure to mention in your documentation which >> are used and where they are registered. >> >> Next, for the cases where you can't find Link Rel Values that suit your >> needs, use the 5988[4] rules for creating full URIs (not relative) and make >> them URLs (resolvable) that point to your own documentation/glossary of >> Link Rel Values online. >> >> Finally, when minting your own Link Rel Values, aim for describing the >> relation between the two resources instead of the action to commit on the >> "target" resource. Use protocol methods to express the "action" to commit: >> >> insert-song -> song (w/ HTTP.POST) >> remove-song -> song (w/ HTTP.DELETE) >> >> Cheers. >> >> [1] http://www.iana.org/assignments/link-relations/link-relations.xhtml >> [2] http://microformats.org/wiki/existing-rel-values >> [3] http://dublincore.org/documents/dcmi-terms/ >> [4] http://tools.ietf.org/html/rfc5988 >> >> >> >> mamund >> +1.859.757.1449 >> skype: mca.amundsen >> http://amundsen.com/blog/ >> http://twitter.com/mamund >> https://github.com/mamund >> http://www.linkedin.com/in/mamund >> >> >> On Tue, Nov 5, 2013 at 9:52 PM, Charles Reese <[email protected]>wrote: >> >>> >>> >>> Hi all, >>> >>> I'm looking at HAL and Collection+JSON for an API I'm building. I was >>> wondering if there are any community norms for constructing link relations. >>> >>> Here is what I'm considering: >>> >>> Option 1: >>> >>> /rels/playlists >>> /rels/playlist >>> /rels/playlist/insert-song >>> /rels/playlist/remove-song >>> >>> Option 2: >>> >>> /rels/playlist >>> /rels/playlist/create >>> /rels/playlist/edit >>> /rels/playlist/delete >>> /rels/playlist/insert-song >>> /rels/playlist/remove-song >>> >>> Option 3: >>> >>> list >>> create >>> edit >>> delete >>> insert-song >>> remove-song >>> >>> The first option mixes the singular and plural for items and >>> collections. Then it tacks on a few actions for what doesn't fit well with >>> CRUD. The last option makes the state transitions explicit (but doesn't >>> allow linking for docs). The middle option is somewhat in between. >>> >>> Which of these is preferred? Are there better options? >>> >>> Charles >>> >>> >>> >>> >> >> >