Why single-interface is broken

Okay.

Single interface per service is proposed as a "simplification" (the term
was used repeatedly).  It's the only argument that I can recall in favor
of this.

I suggest that it is not a simplification.  By introducing redundancy,
it introduces errors.  By introducing errors, without specifying how
these errors are to be handled, it reduces interoperability.

Example:

<interface name="A" />

<interface name="B" />

<binding name="Aimpl" implements="A" />

<binding name="Bimpl" implement="B" />

<service name="aService"> <!-- first error -->
  <endPoint binding="Aimpl" />
  <endPoint binding="Bimpl" /> <!-- one of the foregoing two lines is
the second error -->
</service>

Legal and reasonable in WSDL 1.1, apart from the changes of element and
attribute names.

Illegal in WSDL 1.2.  The lack of specification of the interface
implemented by the service is an error.  Will it be flagged?  Imagine
that this WSDL is created stepwise.  First, interface A, binding Aimpl,
and endPoint A were all created; a validation tool may have noted the
lack of an interface specification on the service, but perhaps offered
only a warning (or perhaps not even that) to the author.  Later,
additional functionality was added, using a different network paradigm
that could not be adequately supported by the existing binding; a second
interface, implementation, and endpoint were added.

A non-WSDL-validating tool will not note the errors at all.  A WSDL
validating tool will note the first error, and then probably decide that
endpoint Bimpl is illegal.  If interface="B" is added to the service,
then it will instead decide that endpoint Aimpl is illegal.  The
harassed and frustrated developer splits them into separate services,
and removes the interface again (if there's only one endpoint in a
service, you can be certain that there will be tools that do not enforce
the user to declare the interface at the service level).  Same harassed
developer looks at @targetResource, says "Huh?  WTF is that?  A resource
is associated with an endpoint, in any rational web-aware world, what's
this weirdness?" and goes on.  The WSDL works again, sort of, after all.

Redundancy is *bad*.  Specifying interface twice is *bad*.  If it's
going to happen at all, error-handling MUST be specified in sufficient
detail that two processors faced with the same description report the
same thing.

Amy!
-- 
Amelia A. Lewis
Architect, TIBCO/Extensibility, Inc.
alewis@tibco.com

Received on Friday, 30 May 2003 13:12:52 UTC