Re: How much REST should your Web API get?
Jørn Wildt <[email protected]> Sat, 4 May 2013 09:07:02 +0200
| Newsgroups | gmane.comp.web.services.rest |
|---|---|
| Message-ID | <CALh-ykJAX4wbEmdbK6jo971O6VqwzbzRW3EYw6HbRfe9VZXpKQ@mail.gmail.com> |
> We have a custom media type "application/vendor.cbrain.casefiole+xml" Sorry, I was too quick here. The REST service is actually composed of two different sets of resources that mixes various parts of the system. Half of it is in "application/json" (the mobile part) - and half of it is in "application/vendor.cbrain.casefiole+xml" (the part designed for systems integration with third party vendors). As I said: I have yet to make up my mind w.r.t. custom versus generic media types. /Jørn On Sat, May 4, 2013 at 8:28 AM, Jørn Wildt <[email protected]> wrote: > Regarding "service document": what if I called it "home page" or "home > document" - would it make a difference? The problem with the classic > "service document" is that it, in the SOAP world, includes type information > and is meant for static "development time" binding. That is not the case > here: our "home document" only includes links with link-rels and a short > description. > > Speaking about shared types ... Jimmy Bogard has a fresh blog post on this > issue: > http://lostechies.com/jimmybogard/2013/05/01/messages-data-and-types/ > > The home document can be served as either one large JSON object with keys > as link-rels and values as URLs (like HAL does it), HTML with <a href="..." > rel="..."> or a homegrown XML format. Today I would probably have chosen > something like JSON-home ( > http://tools.ietf.org/html/draft-nottingham-json-home-02), HAL or another > hyper media enabled *standard* JSON media type. > > So, no, I do not think using a service document / home page disqualifies > the service as being RESTful - as long as it is used for late binding at > runtime (something which we make quite explicit in the documentation). > > > albeit probably at the cost of a lot of initial tooling > > Well, yes, some, but any client that understands JSON can do hyper media > with something like HAL. The server is based on OpenRasta which also has > nice support for creating links. > > > > Also, just curious, are you using your own custom media type or just > JSON/XML/other, > > We have a custom media type "application/vendor.cbrain.casefiole+xml". I > still have to decide whether I prefer generic media types over custom media > types - in this case we chose a custom media type to get some experience. I > will write a piece on that later - when I have made up my mind about what I > think about it. > > > > The one thing I still have not been able to fully understand from Roy's > rant was just exactly what he meant means by a "typed" resource? > > Yes, I have also had problems with that :-) But take my example from the > previous post: the client and server does NOT share any kind of internal > type knowledge about what is behind that resource - actually that would be > a hopeless feat because the code base behind it is rather convoluted. What > they share is an understanding of the message format - the > public-stable-well defined-optimized for easy understanding by third party > devs-format. When we change the actual implementation type behind the > resource we do not change the external format. So servers and clients share > message format - not implementation type - and the clients and servers are > free to choose what ever internal types they want for representing it. > > In the case of <img> resources: the shared message contract is the > jpg/gif/... format (media type). There is no shared understanding of the > server side data/type from which the image was created. > > This mail was written with a 1 year old kid on my arm, so sorry for > misspellings ... I have to leave now :-) > > Regards,, Jørn > > > > On Fri, May 3, 2013 at 11:41 PM, Mike Schinkel <[email protected]>wrote: > >> On May 3, 2013, at 3:57 PM, Jørn Wildt <[email protected]> wrote: >> >> We decided to go "full monty" and stick as closely as possible to the >> REST constraints - especially hyper media. This means our clients have one, >> and only one, single entry point to the REST service - and that entry point >> contains a service document with links/link-rels to all top level >> resources. >> >> ... >> >> This too was easy using hyper media... >> >> The last happy moment also illustrates what (I think) was meant by "*A >> REST API should never have “typed” resources that are significant to the >> client*" in Roy's famous rant "REST APIs must be hypertext-driven<http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven>". >> Had the client known anything about the internal type behind the facade >> then it would have failed when we introduced multiple types behind the >> facade. >> >> Not to diminish what you've accomplished, because it sounds like it works >> extremely well in practice albeit probably at the cost of a lot of initial >> tooling but I would question if the use of a "service document" does not >> by-definition disqualify it as being RESTful as per Roy's precise >> definition, ironically stated in the blog post rant you reference. >> >> As I understand it from a recent multiple re-reading of Roy's infamous >> rant the use of a service document would mean individual messages are >> indeed not fully description and that would disqualify it as being >> "RESTful." Not that I disagree with the concept of a lightweight >> JSON-based service document that simply points out all the URLs; frankly I >> rather like the idea. But unless I mis-read or Roy has revised his >> definition of REST since that post I think service documents do not a >> RESTful web service make? >> >> Also, just curious, are you using your own custom media type or just >> JSON/XML/other, and if not the former does that also not disqualify it from >> being considered RESTful? If you are using your own custom media type I'd >> be curious what the media type is, i.e. what is "xxxx-yyyy" for >> "application/"xxxx-yyyy" and what it's base format is; XML, JSON, HAL, >> ATOM, etc? >> >> The one thing I still have not been able to fully understand from Roy's >> rant was just exactly what he meant means by a "typed" resource? Doesn't a >> <img> tag imply a resource of type JPEG, GIF or PNG, for example? So I >> have never been fully able to grok that part. Any clarifications from >> anyone? >> >> >> -Mike >> > >