據我所知,Web服務是最酷的技術,但它最終會讓大家覺得沉悶。不知道您感覺如何,每當我參加討論web服務的演講時,總是聽到很多縮寫,如REST、XML/RPC、SOAP和RSS。然後就開始打盹,夢到有個地方樹上長滿Krispy Kreme甜面卷。醒來時,我認識到實際上我做了很多web服務工作,並沒完全用到那些毫無意義的標准程序。我看待web服務的方式非常簡單,它就是web應用程序的備用接口,允許其他程序以編程語言可以理解的方式與我的應用程序通信。人們通過HTML與應用程序通信,應用程序通過XML、CSV或其他標准與我的應用程序通信。
圖1能更好地解釋這個理論:
圖1. 傳統的web應用程序與面向服務的架構(SOA)
左側為傳統的web應用程序。服務器通過HTML與web客戶端通信。該服務器可以是任何技術:Java、.NET、Rails、PHP、Python或ColdFusion。右側為相同的web應用程序。但是它除了提供HTML,還使用XML通信,因此可以與其他應用程序或RSS閱讀器之類的專用服務器交流。
我經常聽到人們談論完全基於服務的應用服務器。這對於後端技術來說可能不錯。但是對於普通的web應用程序,您總是希望它同時支持HTML和XML接口。擁有兩種接口的一項好處在於,它強制您將業務邏輯集中到一個位置(可能是一個“中間層”),因此HTML和XML接口都可以與數據庫通信並獲得相同的結果。
允許web應用程序通過XML與其他程序通信的價值對您來說可能顯而易見,但是對我來說並非如此,至少最初是這樣。因此本文講述一個示例,演示通過在應用程序中設置XML接口可以實現哪些功能。首先講述簡單的HTML前端,然後顯示如何構建XML接口並添加各種閱讀器(包括Ajax、RSS和Adobe Flex)。
文章應用程序
首先講述的測試應用程序是數據庫中有一個文章列表的程序。清單1顯示了這個數據庫。
清單 1. articles.sql
DROP TABLE IF EXISTS articles;
CREATE TABLE articles (
id INTEGER NOT NULL AUTO_INCREMENT,
title VARCHAR(255),
author VARCHAR(255),
description TEXT,
PRIMARY KEY( id ) );
INSERT INTO articles VALUES ( null,
'What I like about dogs', 'Megan Herrington',
'Everything that I love about dogs I learned in preschool' );
INSERT INTO articles VALUES ( null,
'Making action movies', 'Jack Herrington',
'How to script, produce and direct Hong Kong action flicks' );
INSERT INTO articles VALUES ( null,
'Super Paper Mario Tips', 'Lori Herrington',
'Everything you need to know to win at Paper Mario' );
INSERT INTO articles VALUES ( null,
'Why I bark', 'Oso Herrington',
'' );