5 ms·
Yes, URIs in the response sounds amazingly cool, but it won't change anything. The inline URLs of the web work because the consumers are humans who can deal wi
by stephen 14y ago
Yes, URIs in the response sounds amazingly cool, but it won't change anything.
The inline URLs of the web work because the consumers are humans who can deal with changes (more than just trivial URL changes, like added, removed features) and now click on this button or that button.
Software isn't that flexible, so it will be just as coupled as it is today--you're just moving the coupling around.
So this idea of a "robust client-server relationship" is a pipe dream IMO.
- steveklabnik 14y agoI've built these kinds of things before: http://words.steveklabnik.com/i-invented-hypermedia-apis-by-accident http://words.steveklabnik.com/i-invented-hypermedia-apis-by-...
- stephen 14y agoNot saying that system doesn't sound cool, but my point about hypermedia APIs is that when you serve back: <link href="http://example.com/low.rss http://example.com/low.rss rel="podcast_url" /> You've moved the coupling from "look at URL xyz" to "look for rel podcast_url". Okay, yes, you can now change the URL, that's cool, but I assert that's relatively trivial. You can't truly add/remove new functionality (or break existing contracts, like "look for rel=podcast_url") that some omnipotent client would suddenly start taking advantage of. IMO this omnipotent realization/utilization of new/changed features is what hypermedia advocates get all excited about, without realizing that humans are really the only ones that can deal with that level of (true) decoupling.
- steveklabnik 14y agoThe important part is that this is all documented in the media type. Of course, computers aren't able to just figure out what's up, that's why it's agreed upon beforehand. > You can't truly add/remove new functionality You can absolutely add new functionality, because rule #1 of clients that work this way is 'ignore things you don't understand.' Removal will obviously break things, so it's important to handle this in the appropriate way. I guess ultimately my point is that these kinds of APIs are significantly different, and come with a very different set of constraints/goals/implementation details. It's like you're saying "well, I don't have a full list of function calls I can make!" because you're used to SOAP where there's a WSDL and 'RESTful' APIs don't have description documents. Of course! It's a different architecture!
- Flenser 14y agoWith some conventions how the api is structured it's possible to have loose coupling the between client and server. This video demonstrates how it is possible to make changes in structure of the API that the client detects automatically: http://oredev.org/2010/sessions/hypermedia-apis http://oredev.org/2010/sessions/hypermedia-apis And he's release a Java library for creating such a client: https://github.com/cimlabs/hypermedia-client-java https://github.com/cimlabs/hypermedia-client-java