While browsing w3c.org I discovered an interesting document called Architecture of the World Wide Web (http://www.w3.org/TR/webarch/), which gives an abstract overview of the architecture of the web itself[1]. Here's an excerpt from the abstract:
The World Wide Web is a network-spanning information space of
resources interconnected by links. This information space is the basis of, and
is shared by, a number of information systems. Within each of these systems,
agents (people and software) retrieve, create, display, analyze, and reason
about resources.
Web architecture includes the definition of the information space in terms of identification and representation of its contents, and of the protocols that support the interaction of agents in an information system making use of the space. Web architecture is influenced by social requirements and software engineering principles, leading to design choices that constrain the behavior of systems using the Web in order to achieve desired properties of the shared information space: efficiency, scalability, and the potential for indefinite growth across languages, cultures, and media. This document reflects the three bases of Web architecture: identification, interaction, and representation.
So basically, the web is a network of hyperlinked nodes called resources. Resources are consumed by human and software agents. Software agents include browsers, proxies, servers, spiders, and multi-media players.
Each resource is identified by one or more unique names called a Uniform Resource Identifier or URI (URIs are the new URLs). Resources not only include documents (web pages and other types of files), but also web applications and web services.
A web application is any application with a web interface. Web applications are typically consumed by human agents. Priceline.com is an example of a web application. Human agents input desired departure date, destination, and price. Internally, the application searches several airlines for a match. The result of the search is then returned to the user.
A web service is a standalone component used by several web applications. Web services are typically consumed by software agents and web applications. Air France might provide a web service that allows web applications like priceline.com to submit bids on available flights. Priceline.com might provide a web service that lets shopping agents (software agents that shop for humans) negotiate costs and flights.
Resources can be stateful. For example, the state of a stock ticker web service might include the current DOW Jones average. Applications that use the stock ticker might choose to represent this information in different formats.
ODP is a reference architecture for systems constructed from distributed, heterogeneous components. Components communicate by passing messages. A component has one or more unique identifiers. A component is either a service requestor, a service provider, or both. A service provider component implements one or more interfaces. Associations between interfaces and the identifiers of implementing components are maintained by registries. A registry is like the yellow pages section of a phone book. Using a registry, a client component can dynamically locate and interact with the provider components it needs. This is called discovery. (See http://www.joaquin.net/ODP/).
There are several notable implementations of the ODP architecture. The best known is the Object Management Group's (http://www.omg.org/) Object Management Architecture or OMA. The OMA reference architecture envisions layers of applications, services, and facilities, all written in different Object-Oriented languages. Remote method invocation is provided by an object request broker or ORB. (In fact OMA better known as CORBA-- Common Object Request Broker Architecture).
Microsoft's COM (Component Object Model) architecture implemented ODP for programs running on the same Windows platform. This enabled the popular Object Linking and Embedding (OLE) technology. The DCOM extension allowed OLE to reach across networks.
Java RMI implemented ODP for cooperating Java programs.
The Web Services Architecture (WSA) is the latest implementation.
WSA is a reference architecture, similar to ODP and OMA. The details can be found at:
http://www.w3.org/2002/ws/arch/
Web Service = service
interface
WSD = web services
descriptor = interface description (supports discovery)
Agent = component =
service implementor (provider agent and/or requestor agent)
The original
motivation envisioned new applications built out of distributed components, but
now the tendency is to make existing applications partially available on the
web by incorporating agents, thus creating a web-enabled application. The
ultimate goal of web-enabling an application is low-cost integration of
existing applications.
SOAP = Simple Object Access Protocol (Messages)
WSDL = Web Services Description Language
UDDI = Universal Description, Discover, and Integration
.NET
J2EE
J2EE Support
Apache
IBM
Eclipse
BEA
Sun
See http://java.sun.com/xml/docs.html
http://www.w3c.org/TR/2003/REC-soap12-part0-20030624/
<?xml version='1.0'
?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<!-- Headers are optional.
Any XML can go in a header.
Headers contain header blocks.
Header blocks describe context information.
-->
</env:Header>
<env:Body>
<!-- any XML goes here -->
</env:Body>
<env:Envelope>
<?xml version='1.0'
?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns =
"http://www.demo.org/memo">
<env:Header>
<from>Dr. Morris
Fishbine</from>
<to>HR</to>
<date>2001-11-29</date>
</env:Header>
<env:Body>
<employee>
<name>Joe
Smith</name>
<ssn>555-55-1234</ssn>
<dept>R&D</dept>
</employee>
</env:Body>
</env:Envelope>
Although SOAP
stands for "Simple Object Access Protocol" implying that it's
original application was remote method invocation, SOAP can be used to
represent ordinary messages. In this case the sender agent simply encapsulates
a message in the body of a SOAP envelope and sends it to a receiver agent. The
message itself may be transported using RPC, email, or HTTP. In the simplest
model sessions betwenn a sender and receiver are stateless, but more complicated
patterns can be implemented.
For example:
<?xml version='1.0'
?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns =
"http://www.demo.org/memo">
<env:Header>
<from>Dr. Morris
Fishbine</from>
<to>HR</to>
<date>2001-11-29</date>
</env:Header>
<env:Body>
<employee>
<name>Joe
Smith</name>
<ssn>555-55-1234</ssn>
<dept>R&D</dept>
</employee>
</env:Body>
</env:Envelope>
<?xml version='1.0'
?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns =
"http://www.demo.org/memo">
<env:Header>
<from>Dr. Morris
Fishbine</from>
<to>HR</to>
<date>2001-11-29</date>
</env:Header>
<env:Body>
<method>dot-product</method>
<vector xc = "3"
yc = "4" zc = "2"/>
<vector xc = "1"
yc = "8" zc = "-7.6"/>
</method>
</env:Body>
</env:Envelope>
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:rpc='http://www.w3.org/2003/05/soap-rpc'>
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
<env:Subcode>
<env:Value>rpc:BadArguments</env:Value>
</env:Subcode>
</env:Code>
<env:Reason>
<env:Text
xml:lang="en-US">Processing error</env:Text>
<env:Text
xml:lang="cs">Chyba zpracování</env:Text>
</env:Reason>
<env:Detail>
<e:myFaultDetails>
<message>vectors must have
same length</message>
<errorcode>999</e:errorcode>
</myFaultDetails>
</env:Detail>
</env:Fault>
</env:Body>
</env:Envelope>
[1] The article makes reference to an even more abstract reference model called a Representational State Transfer architecture (REST) that the web instantiates.