- From: Erik Wilde <dret@berkeley.edu>
- Date: Fri, 31 Jul 2015 11:02:25 -0700
- To: Annette Greiner <amgreiner@lbl.gov>, Data on the Web Best Practices Working Group <public-dwbp-wg@w3.org>
- CC: Andreas Kuckartz <a.kuckartz@ping.de>, Carlos Iglesias <carlos.iglesias.moro@gmail.com>, Newton Calegari <newton@nic.br>, Yaso <yaso@nic.br>
hello annette. On 2015-07-29 1:08 , Annette Greiner wrote: > Weighing all the arguments, I feel like I understand the reasoning behind avoiding versioning, that it shouldn't be needed if you only ever change what's under the hood and leave the actual interface alone, but I do wonder how successful people have been in getting the interface part right the first time, or at least right enough that any revision could really be considered a different API. i don't want to get into any REST preaching here, but one of the main pillars of REST is that the interface is uniform, i.e. there is no need for people to even invent interfaces, and thus there is no need to version them. the only thing that does need service-specific definition (maybe) is the media type, which thus may be what you actually refer to when you say "interface" above. HTTP hasn't changed in a very long time (even though there are additions that people define if they want to expose additional info in that interface). this gets web architecture to the point that what services operate on are media types. and that's what i was talking about originally. well-designed media types should be open and extensible, so that they can carry basic data as well as additional one. very often, this is done robustly defining "must ignore" semantics in the processing model. some media types have attempted to use or allow "must understand" semantics (SOAP is one well-known example), but this can cause a lot of breakage because lazy service providers not wanting to think about backwards compatibility then label everything as "must understand", effectively creating a new service that's not generally consumable anymore. > I guess I don't see a big advantage to putting that "new API" at http://otherthing.mydata.org instead of http://thing.mydata.org/v2. As long as you keep both versions up and running, you don't break anyone's code. how you name the services is completely irrelevant, and i would strongly suggest for the DWBP document not to create the impression that the above two URIs are different in any way (other than maybe following some kind of friendly naming convention that has no technical implication whatsoever). the huge problem is that you create split personality resources. if you serve the same resource at two URIs, what is the resource's "actual" URI? or does he same resource now have two identities? that would be very bad because now everybody working with those resource identities has to know about both of them. so one giant anti-pattern is to create these kind of "duplicate identities", which create big headaches in the long run when users count and depend on unique and robust identifiers. > Using a version number at least helps clarify what is different. but what *is* different? are these really two resources now? if they are, there's no need to relate them at all. if they have a well-defined relationship, that should be made very explicit by relating them in a way that is discoverable and stable. experience shows that while it may seem like no big deal to assign these additional identifiers, it wreaks havoc on one of the main pillars of REST, i.e. unique and stable resource identifiers. > As a developer, I think it's much easier to decide to use "v2" in a new client than to decide whether to use "thing" or "otherthing". again, the name is completely irrelevant. and most importantly, providers should really really try to avoid minting more than one URI for resources, it makes consumption (and more importantly, processing and relating resources robustly) much harder. > I find the example of HTML unhelpful, because what gives a web site its resilience to unheralded change is the human in the loop. Where we attempt to navigate web sites in code (scraping, bookmarking), things get brittle fast. no, what makes web sites so stable actually *is* the design of HTML that allows production and consumption across a vast variety of different "versions" of the language. that's why HTML does *not* need a version identifier in the URI or in the media type. you can mix and match versions and things Just Work. they Just Work because of the processing model (must ignore on unknown elements/attributes, plus the requirement to process content of unknown elements), which means that responsible providers can create HTML that is consumable by software that has been created over the course of two decades. that's nothing to sneeze upon. cheers, dret. -- erik wilde | mailto:dret@berkeley.edu - tel:+1-510-2061079 | | UC Berkeley - School of Information (ISchool) | | http://dret.net/netdret http://twitter.com/dret |
Received on Friday, 31 July 2015 18:03:09 UTC