OdREILLY - Die Onleihe

Werbung
he
sc e
ut ab
De usg
A
Frischer Wind für
Web Services durch REST
Web Services
mit
REST
Leonard Richardson & Sam Ruby
O’Reilly
Deutsche Übersetzung von
Thomas Demmig & Sebastian Tussing
First
Inhalt
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IX
Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XI
1
2
3
Max.
Linie
Das programmierbare Web und seine Bewohner . . . . . . . . . . . . . . . . . . . . . . .
1
Lebewesen im programmierbaren Web . . . . . . . . . . . . . . . . . . . . . . . . . . .
HTTP: Dokumente in Umschlägen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Methodeninformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fokusinformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die konkurrierenden Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Technologien im programmierbaren Web . . . . . . . . . . . . . . . . . . . . . . . . .
Weitere Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
6
8
12
14
20
22
Clients für Web Services schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Web Services sind Web-Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
del.icio.us: Die Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen Request stellen: HTTP-Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . .
Verarbeiten der Response: XML-Parser . . . . . . . . . . . . . . . . . . . . . . . . . . .
JSON-Parser: Umgang mit serialisierten Daten . . . . . . . . . . . . . . . . . . . . .
Clients ganz einfach – mit WADL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
28
31
42
48
52
Was macht REST-konforme Services anders? . . . . . . . . . . . . . . . . . . . . . . . . . .
55
Einführung in den Simple Storage Service . . . . . . . . . . . . . . . . . . . . . . . . .
Objektorientiertes Design von S3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HTTP-Responsecodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein S3-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signierte Requests und Zugriffskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . .
Verwenden der S3-Client-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
57
58
60
62
72
79
| V
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Links
Transparente Clients durch ActiveResource . . . . . . . . . . . . . . . . . . . . . . .
Abschlusswort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
5
Die ressourcenorientierte Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
Ressourcenorientiert: Warum? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was ist eine Ressource? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Adressierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zustandslosigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Repräsentationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verweise und Verbindungshaftigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die einheitliche Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das war’s! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
91
92
95
98
103
106
110
119
Entwurf von nur lesbaren ressourcenorientierten Services . . . . . . . . . . . . . . . . 121
Ressourcendesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anforderungen in nur lesbare Ressourcen umwandeln . . . . . . . . . . . . . . .
Welche Daten sind notwendig? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unterteilen der Daten in Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Benennen der Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Entwerfen Sie Ihre Repräsentationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verbinden der Ressourcen miteinander . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die HTTP-Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
80
86
123
124
125
128
133
140
154
156
160
Entwurf von les- und schreibbaren ressourcenorientierten Services . . . . . . . . . 161
Benutzerkonten als Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Eigene Orte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Ein Blick zurück auf den Kartenservice . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
7
Eine Service-Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Ein Social Bookmarking-Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Welche Daten werden benötigt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ressourcendesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vom Client kommende Repräsentation(en) entwerfen . . . . . . . . . . . . . . .
Repräsentation(en) zum Senden an den Client entwerfen . . . . . . . . . . . . .
Ressourcen miteinander verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was soll passieren? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was kann schiefgehen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Controller-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Model-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was muss der Client wissen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Max.
Linie
VI |
Inhalt
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
189
191
193
207
210
211
212
213
214
233
237
Max.
Linie
Rechts
8
Best Practices: REST und ROA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Ressourcenorientierte Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Der allgemeine ROA-Ablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Addressierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zustand und Zustandslosigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connectedness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die einheitliche Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das ist wirklich wichtig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ressourcendesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URI-Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ausgehende Repräsentationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eingehende Repräsentationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Versionierung des Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Permanente URIs vs. lesbare URIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Standardeigenschaften von HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PUT und DELETE vortäuschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ärger mit Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Warum einem HTTP-Client trauen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
243
244
245
246
247
247
250
258
264
265
266
267
268
270
286
286
288
Die Bausteine eines Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Repräsentationsformate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Zusammengestellte Kontrollflüsse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Hypermedia-Technologien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
10 Die ressourcenorientierte Architektur vs. dicke Web Services . . . . . . . . . . . . . . 343
Welche Probleme versuchen dicke Web Services zu lösen? . . . . . . . . . . . .
SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reliable Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BPEL, ESB und SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
344
345
349
355
356
358
359
360
362
11 Ajax-Anwendungen als REST-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Max.
Linie
Von AJAX zu Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Ajax-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein del.icio.us-Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Vorteile von Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Nachteile von Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REST geht besser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Inhalt |
364
364
366
369
370
371
VII
Max.
Linie
Links
Durchführung des Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verarbeitung der Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Behalten Sie nicht die Vorteile von REST für sich . . . . . . . . . . . . . . . . . . .
Cross-Browser-Probleme und Ajax- Bibliotheken . . . . . . . . . . . . . . . . . . .
Das Sicherheitsmodell des Browsers untergraben . . . . . . . . . . . . . . . . . . .
372
374
375
376
378
382
12 Frameworks für REST-konforme Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Ruby on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Restlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
A
Einige Ressourcen für REST und einige REST-konforme Ressourcen . . . . . . . . . 421
Standards und Leitfäden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Services, die Sie verwenden können . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
B
Die wichtigsten 42 HTTP-Responsecodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Drei bis sieben Statuscodes: Das Minimum . . . . . . . . . . . . . . . . . . . . . . . .
1xx: Meta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2xx: Erfolgreich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3xx: Weiterleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4xx: Fehler auf Clientseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5xx: Fehler auf Serverseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C
430
431
433
436
440
447
Die HTTP-Header-Hitliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Standard-Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Header außerhalb des Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Max.
Linie
Max.
Linie
VIII |
Inhalt
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
First
Kapitel 1
Hier Mini IVZ eingeben!
Erstellen auf den
Arbeitsseiten
(siehe Muster)
KAPITEL 1
Das programmierbare Web
und seine Bewohner
Abstand untere Tabellenlinie zu Textanfang 1,8 cm
-> also: manuell auf den Arbeitsseiten ziehen!!!
Wenn Sie ein Computerprogramm schreiben, sind Sie nicht auf die Algorithmen beschränkt, die Sie sich selber ausdenken können. Die Standardbibliothek Ihrer Sprache
bietet Algorithmen an. Sie können zudem welche aus Büchern oder aus Fremdbibliotheken übernehmen, die Sie online finden. Nur, wenn Sie mit Ihrem Programm
Wegbereiter sind und Neuland betreten, sollten Sie ein paar eigene Algorithmen
beisteuern.
Wenn Sie Glück haben, gilt das Gleiche für die Daten. Manche Anwendungen
leben komplett von den Daten, die die Benutzer eingeben. Manchmal kommen die
Daten auch ganz von allein: Wenn Sie Spam analysieren, sollten Sie keine Probleme
haben, so viel zu bekommen, wie Sie brauchen. Sie können ein paar frei nutzbare
Datensammlungen herunterladen – Wortlisten, geografische Daten, Listen mit
Primzahlen, gemeinfreie Texte –, als wären es Bibliotheken von Fremdherstellern.
Aber wenn Sie andere Daten brauchen, sieht es nicht so gut aus. Wo sollen die
Daten herkommen? Immer häufiger kommen sie aus dem programmierbaren Web.
Wenn Sie – als Mensch – ein Buch zu einem bestimmten Thema finden wollen,
geben Sie in Ihrem Web-Browser vermutlich den URI einer Onlinebibliothek oder
eines Buchhandels ein, zum Beispiel http://www.amazon.com/.
Der meistverwendete Begriff für die Adresse von etwas im Web ist
»URL«. Ich schreibe in diesem Buch immer »URI«, weil dies auch im
HTTP-Standard genutzt wird. Jeder URI im Web ist auch eine URL,
so dass Sie immer »URL« denken können, wenn ich »URI« schreibe
– ohne Bedeutungsverlust.
Max.
Linie
Sie erhalten eine Web-Seite, ein Dokument im HTML-Format, das Ihr Browser
grafisch aufbereitet. Sie durchforsten die Seite visuell nach einem Suchformular,
geben Ihr Thema (zum Beispiel »Web Services«) in ein Textfeld ein und schicken
das Formular ab. An dieser Stelle führt Ihr Web-Browser einen zweiten HTTP-
| 1
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Links
Request durch, wobei der URI Ihr Thema enthält. Im Amazon-Beispiel würde der
zweite URI Ihres Browsers in etwa so aussehen: http://amazon.com/s?url=searchalias%3Dstripbooks&field-keywords=web+services.
Der Web-Server bei amazon.com reagiert, indem er ein zweites Dokument im HTMLFormat zurückgibt. Dieses Dokument enthält eine Beschreibung Ihrer Suchergebnisse, Verweise auf zusätzliche Suchoptionen und diverse kommerzielle Verführungen (siehe Beispiel 1-1). Wieder rendert Ihr Browser das Dokument grafisch und Sie
schauen es sich an, um zu entscheiden, was Sie nun tun wollen.
Beispiel 1-1: Ausschnitt aus der HTML-Response von amazon.com
...
<a href="http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/...>
<span class="srTitle">RESTful Web Services</span>
</a>
by Leonard Richardson and Sam Ruby
<span class="bindingBlock">
(<span class="binding">Paperback</span> - May 8, 2007)
</span>
Das Web, das Sie nutzen, ist voll mit Daten: Buchinformationen, Meinungen, Preise,
Ankunftszeiten, Mitteilungen, Fotografien und anderem Krempel. Es ist voll von
Services: Suchmaschinen, Onlineshops, Weblogs, Wikis, Taschenrechner und
Spiele. Anstatt all diese Daten und Programme auf Ihrem eigenen Computer zu
installieren, installieren Sie nur ein Programm – einen Web-Browser – und greifen
darüber auf die Daten und Services zu.
Beim programmierbaren Web ist das Gleiche. Der Hauptunterschied liegt darin,
dass seine Daten nicht in attraktiven HTML-Seiten mit Banner-Werbung und hübschen pastellfarbenen Logos arrangiert sind, sondern normalerweise in kargen, ruppigen XML-Dokumenten daherkommen. Das programmierbare Web ist nicht
notwendigerweise für Menschen gedacht. Seine Daten dienen als Eingabe für ein
Softwareprogramm, das etwas Tolles tut.
Beispiel 1-2 zeigt ein Ruby-Skript, das das programmierbare Web nutzt, um eine
klassisch menschliche Aufgabe zu erledigen: die Titel von Büchern zu finden, die zu
einem Schlüsselbegriff passen. Es verbirgt den Web-Zugriff unter der Schnittstelle
einer Programmiersprache und verwendet die Ruby-Amazon-Bibliothek (http://
www.caliban.org/ruby/ruby-amazon.shtml).
Beispiel 1-2: Mit einem Ruby-Skript nach Büchern suchen
Max.
Linie
#!/usr/bin/ruby -w
# amazon-book-search.rb
require 'amazon/search'
2 |
Kapitel 1: Das programmierbare Web und seine Bewohner
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Beispiel 1-2: Mit einem Ruby-Skript nach Büchern suchen (Fortsetzung)
if ARGV.size != 2
puts "Verwendung: #{$0} [Amazon Web Services AccessKey ID] [Suchtext]"
exit
end
access_key, search_request = ARGV
req = Amazon::Search::Request.new(access_key)
# Für jedes Buch im Suchergebnis ...
req.keyword_search(search_request, 'books', Amazon::Search::LIGHT) do |book|
# Buchtitel und Autoren ausgeben.
puts %{"#{book.product_name}" von #{book.authors.join(', ')}}
end
Um dieses Programm auszuführen, müssen Sie sich ein Konto für die Amazon Web
Services (http://aws.amazon.com/) einrichten und dem Ruby-Code Ihre Access Key
ID übergeben. Hier ein Beispiellauf des Programms:
$ruby amazon-search.rb C1D4NQS41IMK2 "restful web services"
"RESTful Web Services" von Leonard Richardson, Sam Ruby
"Hacking with Ruby: Ruby and Rails for the Real World" von Mark Watson
Im besten Fall funktioniert das programmierbare Web genauso wie das menschliche
Web. Wenn amazon-book-search.rb die Methode Amazon::Search::Request#keyword_search aufruft, verhält sich das Ruby-Programm wie ein Web-Browser. Es löst
einen HTTP-Request an einen URI aus – in diesem Fall in etwa http://xml.amazon.
com/onca/xml3?KeywordSearch=restful+web+services&mode=books&f=xml&type=
lite&page=1. Der Web-Server bei xml.amazon.com reagiert mit einem XML-Dokument. Dieses Dokument, zu sehen in Beispiel 1-3, beschreibt die Suchergebnisse so,
wie Sie das HTML-Dokument in Ihrem Web-Browser sehen, nur in einer strukturierteren Form.
Beispiel 1-3: Teil der XML-Response von xml.amazon.com
...
<ProductName>RESTful Web Services</ProductName>
<Catalog>Book</Catalog>
<Authors>
<Author>Leonard Richardson</Author>
<Author>Sam Ruby</Author>
</Authors>
<ReleaseDate>01 May, 2007</ReleaseDate>
...
Max.
Linie
Nachdem ein Web-Browser seinen HTTP-Request abgeschickt hat, ist der Rest recht
einfach. Er muss die Antwort so aufbereiten, dass ein Mensch sie verstehen kann. Er
muss sich nicht überlegen, was die HTTP-Response bedeutet – das ist die Aufgabe
des Menschen. Ein Web Service-Client kann sich diesen Luxus nicht leisten. Er ist im
Voraus programmiert, daher muss er beides tun – als Web-Browser die Daten einsammeln und als »Mensch« entscheiden, was die Daten bedeuten. Web Service-
Das programmierbare Web und seine Bewohner
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
| 3
Max.
Linie
Links
Clients müssen die Bedeutung automatisch aus HTTP-Responses extrahieren und
davon abhängig Entscheidungen treffen.
In Beispiel 1-2 hat der Web Service-Client das XML-Dokument durchgearbeitet, ein
paar interessante Informationen herausgezogen (Buchtitel und Autoren) und diese
Informationen an der Konsole ausgegeben. Das Programm amazon-book-search.rb
ist im Endeffekt ein kleiner Web-Browser für einen bestimmten Zweck, der Daten an
einen menschlichen Benutzer ausgibt. Es könnte leicht noch andere Dinge mit den
Amazon-Daten tun, was keinerlei menschlichen Eingriff benötigen würde, z.B. die
Buchtitel in einer Datenbank speichern oder mit den Autorendaten eine Empfehlungs-Engine füttern.
Und die Daten müssen nicht immer zum Client fließen. So, wie Sie Teile des »menschlichen« Webs Ihrem Willen unterwerfen können (indem Sie in Ihrem Weblog
posten oder ein Buch kaufen), können Sie Clients schreiben, die das programmierbare Web verändern. Sie können es als Speicherort nutzen oder als weitere Quelle für
Algorithmen, die Sie nicht selber schreiben wollen. Es hängt davon ab, welchen Service Sie benötigen und ob Sie jemanden finden, der ihn bereitstellt.
Beispiel 1-4 ist ein Beispiel für einen Web Service-Client, der das programmierbare
Web anpasst: die s3sh-Command-Shell für Ruby (http://amazon.rubyforge.org/).
Dabei handelt es sich um einen der vielen Clients, die für einen anderen Web Service
von Amazon gedacht sind: S3, oder auch Simple Storage Service (http://aws.amazon.
com/s3). In Kapitel 3 behandle ich die Fähigkeiten von S3 im Detail. Wenn Sie also
an s3sh näher interessiert sind, können Sie dort mehr nachlesen.
Um diese s3sh-Anweisungen zu verstehen, müssen Sie nur wissen, dass Amazon S3
seine Clients benannte Datenblöcke (»Objekte«) in benannten Containern (»Buckets«) unterbringen lässt. Das s3sh-Programm sorgt für eine interaktive Programmierschnittstelle auf Basis von S3. Andere Clients verwenden S3 als Backup-Tool oder
Web-Host. Es ist ein sehr flexibler Service.
Beispiel 1-4: Das programmierbare Web mit s3sh und S3 anpassen
$s3sh
>> Service.buckets.collect { |b| b.name }
=> ["example.com"]
>> my_bucket = Bucket.find("example.com")
>> contents = open("disk_file.txt").read
=> "Dieser Text ist der Inhalt der Datei disk_file.txt"
>> S3Object.store("mydir/mydocument.txt", contents, my_bucket.name)
>> my_bucket['directory/document.txt'].value
=> "Dieser Text ist der Inhalt der Datei disk_file.txt"
Max.
Linie
In diesem Kapitel gebe ich einen Überblick über den aktuellen Stand des programmierbaren Webs: Welche Technologien werden verwendet, welche Architekturen
4 |
Kapitel 1: Das programmierbare Web und seine Bewohner
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
werden implementiert und welche Designstile sind am beliebtesten? Ich zeige echten
Code und echte HTTP-Konversation, aber mein Hauptziel in diesem Kapitel ist,
Ihnen das World Wide Web als eine Möglichkeit nahezubringen, Computerprogramme miteinander zu verbinden, und zwar auf die gleiche Art und Weise, wie es
Menschen zusammenbringt.
Lebewesen im programmierbaren Web
Das programmierbare Web basiert auf HTTP und XML. Manche Bereiche bieten
andere Formate: HTML, JavaScript Object Notation (JSON), einfachen Text oder
Binärdateien, aber meist wird XML verwendet. Und alles basiert auf HTTP: Wenn
Sie HTTP nicht verwenden, sind Sie nicht im Web.1 Neben dieser kleinen Insel der
Gemeinsamkeit gibt es eigentlich nur Unterschiede. Die Terminologie ist nicht
vorgegeben, und verschiedene Leute verwenden allgemeine Begriffe (wie »REST«,
das Thema dieses Buchs) eher ungenau und verwirrend. Es fehlt ein klarer Weg, das
programmierbare Web zu klassifizieren. Denn damit werden die Bedeutungen einzelner Begriffe klar.
Stellen Sie sich das programmierbare Web als Ökosystem vor, wie einen Ozean, der
von vielen Arten seltsamer Kreaturen bevölkert wird. Frühere Wissenschaftler und
Seefahrer klassifizierten die Lebewesen im Meer aufgrund ihres oberflächlichen
Aussehens: Wale wurden einfach den Fischen zugeschlagen. Moderne Wissenschaftler klassifizieren Tiere bezüglich ihrer Position im evolutionären Baum allen
Lebens: Wale sind nun bei den anderen Säugetieren eingeordnet. Es gibt zwei
entsprechende Wege, die Services zu klassifizieren, die das programmierbare Web
bevölkern: auf der Basis ihrer Technologie (URIs, SOAP, XML-RPC und so weiter)
oder anhand der zugrundeliegenden Architektur und der Designphilosophie.
Normalerweise vertragen sich die beiden Systeme zum Klassifizieren von Seelebewesen recht gut. Sie brauchen keinen DNA-Test, um zu wissen, dass ein Thunfisch eher
einem Barsch ähnelt als einer Seeanemone. Aber wenn Sie wirklich verstehen wollen,
warum Wale unter Wasser atmen können, müssen Sie damit aufhören, sie als Fische
zu klassifizieren (aufgrund ihrer oberflächlichen Erscheinung) und damit beginnen,
sie den Säugetieren zuzuordnen (wegen der zugrundeliegenden Architektur).2
Max.
Linie
1
Dank dem WS-Adressierungsstandard der Dicken Web Services ist es nun möglich, einen Web Service
zu erstellen, der nicht im Web arbeitet: einer, der E-Mail oder TCP statt HTTP als Transportprotokoll
verwendet. Ich denke nicht, dass nahezu alles im Web sein muss, aber man sollte diese bizarre Variante
nicht einen Web Service nennen. Dieser Punkt ist nicht sehr wichtig, da in der Praxis so gut wie jeder
HTTP verwendet. Soviel zur Fußnote. Die einzigen Ausnahmen, die ich kenne, sind die Web Services
von eBay, die Ihnen SOAP-Dokumente sowohl per E-Mail als auch über HTTP schicken können.
2
Melville nutzte in Moby Dick einen Großteil des Kapitels 22 (»Cetologie«) dazu, Argumente dafür zu
bringen, warum der Wal ein Fisch sei. Das klingt seltsam, aber er bestreitet nicht, dass Wale Lungen
haben und Milch geben – er argumentiert mit einer Definition von »Fisch« aufgrund der Erscheinung,
die im Gegensatz zu Linnés Definition »aus den natürlichen Gesetzen« steht (ex lege naturae).
Lebewesen im programmierbaren Web
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
| 5
Max.
Linie
First
Hier Mini IVZ eingeben!
Index
Erstellen auf den
Arbeitsseiten
(siehe Muster)
Abstand untere Tabellenlinie zu Textanfang 1,8 cm
-> also: manuell auf den Arbeitsseiten ziehen!!!
Symbole
) Fokus-Information 135
), XPath nutzen 26
, (Komma)
Fokus-Information 135
URI-Design und 265
. 53, 250
/ (Schrägstrich)
Django-»Hausstil« und 412
XPath nutzen 26
// XPath-Ausdrücke 10
»Abusing Amazon Images« (Gertler, Nat)
121
Numerisch
(Semikolon) Fokus-Information 135
(Eckige Klammern), XPath nutzen 26
100 »Continue« (Response-Code) 432
101 »Switching Protocols« (Response-Code)
432
200 »OK« (Response-Code) 60, 156, 160,
433
Datenbank-basierter Kontrollfluss 314
Ressourcen anpassen 212
201 »Created« (Response-Code) 433
Datenbank-basierter Kontrollfluss 314
201 Created Response-Code
Ressourcen erstellen 212
202 »Accepted« (Response-Code) 433
203 »Non-Authoritative Information«
(Response-Code) 434
204 »No Content« (Response-Code) 434
206 »Partial Content« (Response-Code) 435
207 »Multi-Status« (Response-Code) 435
300 »Multiple Choices« (Response-Code)
436
301 »Moved Permanently« (Response-Code)
314, 431, 437
302 »Found« (Response-Code) 437
303 »See Other« (Response-Code) 159, 438
304 »Not Modified« (Response-Code) 279,
438
305 »Use Proxy« (Response-Code) 439
306 »Unused« (Response-Code) 439
307 »Temporary Redirect« (Response-Code)
439
400 »Bad Request« (Response-Code) 159,
440
Datenbank-basierter Kontrollfluss 313
Einschränkungen und 213
401 »Unauthorized« (Response-Code) 177,
213, 271, 441
402 »Payment Required« (Response-Code)
441
403 »Forbidden« (Response-Code) 442
404 »Not Found« (Response-Code) 61, 159,
213, 431, 442
Datenbank-basierter Kontrollfluss 314
405 »Method Not Allowed« (ResponseCode) 324, 442
406 »Not Acceptable« (Response-Code) 443
407 »Proxy Authentication Required«
(Response-Code) 443
Max.
Linie
Max.
Linie
|
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
471
Links
408 »Request Timeout« (Response-Code)
444
409 »Conflict« (Response-Code) 177, 431,
444
Datenbank-basierter Kontrollfluss 313
409 »Conflict« Response-Code
nicht autorisierter Zugriff 213
410 »Gone« (Response-Code) 314, 431, 444
411 »Length Required« (Response-Code)
445
412 »Precondition Failed« (Response-Code)
445
413 »Request Entity Too Large« (ResponseCode) 446
414 »Request-URI Too Long« (ResponseCode) 446
415 »Unsupported Media Type« (ResponseCode) 177, 446
Datenbank-basierter Kontrollfluss 313
415 »Unsupported Media Type« ResponseCode 214
416 »Requested Range Not Satisfiable«
(Response-Code) 447
417 »Expectation Failed« (Response-Code)
447
500 »Internal Server Error« (Response-Code)
61, 160, 177, 431, 448
501 »Not Implemented« (Response-Code)
448
502 »Bad Gateway« (Response-Code) 448
503 »Service Unavailable« (Response-Code)
160, 177, 448
504 »Gateway Timeout« (Response-Code)
449
505 »HTTP Version Not Supported«
(Response-Code) 449
A
Max.
Linie
Ablaufdatum, URI kennzeichnen 78
Accept (Request-Header) 452
Accept-Charset (Request-Header) 452
Accept-Encoding (Request-Header) 33, 453
Kompressionsalgorithmen und 276
Accept-Language (Request-Header) 105,
453
Accept-Ranges (Request-Header) 453
»Access Key ID« (Amazon) 63
ActionScript 41, 364
XML-Parser und 48
472 | Index
ActiveRecord 207, 208
ActiveResource 28
Clients, Transparenz durch 80
acts_as_taggable (Plugin) 190, 233
Ad-Hoc-XHTML 306
Adressierbarkeit von URIs 95, 245, 251
Age (Request-Header) 454
Ajax 97
Architektur 364
Browserunterschiede und 378
Request-Proxying 383
Requests 372
Responses, Behandlung 374
REST-Clients 363
Vorteile/Nachteile 369
AllegroServe Web-Server-Bibliothek (Lisp)
42
Allow (Request-Header) 454
Amazon Web Services 3, 56
Adressierbarkeit 96
S3 15, 58
Client-Bibliothek 79
Wrapper 27
Anwendungen und Web-Schnittstellen 289
Anwendungsformulare 325
Anwendungs-Zustand 101, 246
Apache Tomcat 397
API-Schlüssel 162
APP (Atom Publishing Protocol) 15, 55, 314
Collections, Beschreibung 338
application/atom+xml (Medien-Typ) 300
application/json (Medien-Typ) 304
application/xhtml+xml (Medien-Typ) 296
application/xml (Medien-Typ) 306, 308
application/x-www-form-urlencoded
(Medien-Typ) 303
applicaton/xhtml+xml
Ad-Hoc-XHTML 306
Architektur des World Wide Web 91
asynchrone Operationen 259
Asynchronous JavaScript And XML siehe
Ajax 364
AsyncWeb 397
Atom 190, 210, 300
»Atom Authentication« (Pilgrim, Mark) 274
atom-tools (Ruby-Gem) 190
ausgehende Repräsentationen 265
»authenticated«-Nachrichten 174
authenticated-read (Zugriffsrichtlinie) 79
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Authentifizierung (HTTP) 165
Autorisierung und 270
Authorization (Request-Header) 33, 271,
454
S3 und 72
unautorisierter Zugriff und 213
WSSE HTTP-Authentifizierung 274
Autorisierung 164
Authentifizierung und 270
unautorisierter Zugriff und 213
Autorisierungs-Token 288
AWS::S3 56, 62
Axioms of Web Architecture (Berners-Lee,
Tim) 269
B
»Bad Gateway« 502 Response-Code 448
»Bad Request« 400 Response-Code 159,
313, 440
Bad Request 400 Response-Code 213
Einschränkungen und 213
Base 64 Kodierung 271
Basic HTTP Authentication 33, 165, 270
Baum-Parser 42
Beautiful Soup (XML Parser) 46
Benutzer-Controller 197
Benutzerkonten 162, 204
Ressourcen verknüpfen 174
Benutzer-Tags-Controller 200
Berners-Lee, Tim 93, 269
Beschreibung in (natürlicher) Sprache 238
Bibliotheken
S3 79
Standard 1
binäre Dokumente 319
BPEL (Business Process Execution
Language) 360
Browserthemen 378
Browser-übergreifende Themen 378
Buckets 4
Zugriffsrichtlinien 78
Buckets (S3) 57
Builder::XmlMarkup (Ruby) 231
Bunardzic, Alex 91
Business Process Execution Language
(BPEL) 360
Max.
Linie
C
C Programmiersprache 41
XML-Parser und 48
C# 39
XML-Parser und 47
C++ Programmiersprache 41
XML-Parser und 48
Cache-Control (Header) 282, 454
Caching 281
calendar (Controller) 202
__call__ (Methode) 416
Category-Dokumente (APP) 318
class (HTML-Attribut) 297
Clients 25
ActiveResource, Transparenz durch 80
Python 85
Repräsentationen 169, 181
S3 62
Bibliothek 79
Schreiben 32, 400
CLR (Common Language Runtime) 39, 47
Collections (APP) 315
Common Language Runtime (CLR) 39, 47
Common Lisp 42
XML-Parser 48
»Conflict« 409 Response-Code 177, 313,
431, 444
Conflict 409 Response-Code 213
unautorisierter Zugriff und 213
Connection (Request-Header) 455
Content Negotiation 105
Content-Encoding (Header) 276, 455
Content-Language (Request-Header) 456
Content-Length (Request-Header) 456
Content-Location (Header) 245, 283, 456
Content-MD5 (Request-Header) 457
Content-Range (Request-Header) 457
Content-Type (Header) 8, 457
ausgehende Repräsentationen und 265
HTTP-Response und 157
Kodierung und 310
Kompressionsalgorithmen und 276
S3 69
»Continue« 100 Response-Code 432
Controller 195, 199, 393
Code 214
Cookie (Request-Header) 468
Cookies 101, 286
CPAN
XML-Parser und 48
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
473
Max.
Linie
Links
»Created« 201 Response-Code 314, 433
Created 201 Response-Code 212
Ressourcen erstellen
Ressourcen erstellen 212
Crypt
SSLeay (Modul) 42
CSS 42
curl 41
D
Max.
Linie
Date (Request-Header) 457
Datenbanken 192, 212
ActiveRecord und 208
Kontrollfluss und 313
Datensätze 125, 167, 178, 191
Ressourcen aufteilen in 178
DCMI (Dublin Core Metadata Initiative)
305
dd-Tag (HTML) 149
Debian GNU/Linux, Bibliothek net/https
installieren 34
del.icio.us Web Service 28
DELETE (Methode) 9, 32, 110
ActiveResource-Clients und 84
APP-Ressourcen und 322
Benutzer-Controller und 197
Caching und 283
einheitliche Schnittstelle und 248
S3 59
S3::Bucket#delete (Methode) 66
Sicherheit und Idempotenz 116
Simulieren 286
UsersController und 223
Web-Anwendungen und Web Services
395
DELETE-Anweisung (SQL) 84
Dicke Web Services 343
Digest HTTP Authentifizierung 33, 165,
272
Django (Python) 189, 391, 409
Ressourcen als Views implementieren
413
dl-HTML-Tag 296
document (Entity-Body) 7
Dojo 50, 381
Dokumenten-basiertes Protokoll 6
DOMIT! DOM-Parser (PHP) 47
DOM-Parser 42
Dublin Core Metadata Initiative (DCMI)
305
474 | Index
E
ECMAScript-Standard 50
einheitliche Schnittstelle 89, 118, 247, 252
Untermengen bereitstellen 168, 179
Einträge (Atom-Listen) 301
eintreffende Repräsentationen 266
ElementTree (Python) 46
Enterprise Service Bus (ESB) 361
Entity-Body 7, 169
Fokus-Informationen und 13
Form-Encoding und 171
HTTP-Bibliotheken und 32
Look-Before-You-Leap (LBYL)-Anfragen
und 284
PUT/DELETE, simulieren 286
Stapelverarbeitung und 261
XML-Dokumente und 31, 42
EntriesController-Klasse 392
eRDF 305
ESB (Enterprise Service Bus) 361
ETag (HTTP-Header) 33, 212, 458
konditionales GET und 215, 278
Expat XML-Parser 48
Expect (Request-Header) 458
»Expectation Failed« 417 Response-Code
447
Expires (Request-Header) 458
Extensible Open XHTML Outlines (XOXO)
299
F
Feeds (Atom-Listen) 301
Fehler (Status-Codes)
Client 440
Server 447
Fehler auf Client-Seite 440
Firefox 165
Flash 41
Flickr
API 18
Benutzerkonten und 163
Zustandslosigkeit und 102
FOAF 306
Föderieren 357
Fokus-Information 12
Hierarchie in Pfad-Variablen kodieren
134
»Forbidden« 403 Response-Code 442
Form-Encoding 208
Schlüssel-Wert-Paare 41, 303
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Formulare (HTML)
Benutzerkonten und 163
Form-Encoded Schlüssel-Wert-Paare und
303
Hypermedia und 325
kodierte Repräsentation von Benutzerkonten 208
Ressourcen verbinden und 154
XHTML 4 329
»Found« 302 Response-Code 437
Frameworks für REST-konforme Services
391
Framework-spezifische
Serialisierungsformate 306
From (Request-Header) 459
G
Max.
Linie
»Gateway Timeout« 504 Response-Code
449
GData 15, 322
Gem (Programm) 34
Geo Microformat Spezifikation 299
Gertler, Nat 121
GET (Methode) 32, 110
ActiveResource-Clients und 84
APP-Ressourcen und 322
Benutzer-Controller und 197
Bibliothek open-uri und 34
Datenbank-basierter Kontrollfluss und
313
einheitliche Schnittstelle und 247
konditionales HTTP 157, 215
nur lesbare Ressourcen und 124
partiell 284
Ruby-Controller und 393
S3 59, 66
Sicherheit und Idempotenz 116
»Gone« 410 Response-Code 314, 431, 444
Google 11
GData 322
Kalender 289
Maps 144
Repräsentationen und 105
Ressourcen-orientierte Architektur und
97
SOAP und 345
Verweise und Verbindungshaftigkeit 107
Google Mail 97
Ajax und 363, 376
Gourley, David 281
Gregorio, Joe 36, 124
gs
doGoogleSearch Remote Procedure 346
GUI-Elemente 365
gzip 276
H
Hadley, Marc 336
hAtom Microformat Spezification 299
hCalendar Microformat Spezification 298,
307
hCard Microformat Spezification 297, 298,
307
HEAD (Methode) 32, 111
Caching und 281
einheitliche Schnittstelle und 247
nur lesbare Ressourcen und 124
S3 59, 69
Sicherheit und Idempotenz 116
Header 451
Nicht-Standard 468
Standard 452
Hierarchie in Pfad-Variablen 134
High REST 24
Host (Request-Header) 459
How to create a REST Protocol (Gregorio,
Joe) 124
hpricot (Gem) 44
href-Attribut (link-Tag) 328
hResume Microformat Spezification 300
hReview Microformat Spezification 300
HTML 5, 331
Ressourcen verbinden 154
XHTML und 296
HTTP 5, 6, 20
Authentifizierung 165, 270
Basic Authentication 165, 270
Datensätze und 128
Digest Authentication 165, 272
Kodieren 310
Methoden 110
RPC-Architekturen und 15
Sessions 101
Standard-Features 270
The Definitive Guide (Totty, Gourley)
281
WSSE Authentication 33, 165, 274
HTTP Basic Authentication 165
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
475
Max.
Linie
Links
HTTP Response-Codes siehe ResponseCodes (HTTP) 314
»HTTP Version Not Supported« 505
Response-Code 449
HTTP+POX (HTTP plus Plain Old XML)
23
http_authentication (Ruby Plugin) 190
HttpClient (Java) 37
httplib2 (Python) 36
HTTPS 165
Zertifikate 32
HttpURLConnection (Klasse) 397
HTTPWebRequest 39
Hybrid architectures (RPC) 18
Hypermedia 108, 174, 182
Beschreibungen 241
Technologien 325
WADL und 333
Hypermedia als treibende Kraft des
Anwendungs-Zustands siehe
Verbindungshaftigkeit 106
I
iCalendar 307
Idempotenz 116
einheitliche Schnittstelle 248
If-Match (HTTP-Header) 459
If-Modified-Since (HTTP-Header) 33, 157,
279, 459
If-None-Match (HTTP-Header) 157, 460
konditionales GET und 278
If-Range (HTTP-Header) 460
If-Unmodified-Since (Header) 461
image/svg+xml (Medientyp) 303
Implementierung 188
INSERT-Anweisung (SQL) 84
»Internal Server Error« 500 Response-Code
61, 160, 177, 431, 448
ISO 8859-1-Kodierung 309
itemsPerPage-Element (OpenSearch) 303
J
Max.
Linie
JAR-Dateien 408
Java 37, 364
XML-Parser und 47
java.net.HttpURLConnection HTTP-Client
37
java.net.URL (Objekt) 37
476 | Index
JavaScript 40
Ajax und 364
on Demand 385
XML-Parser 47
JavaScript Object Notation siehe JSON 142
javax.xml.* (Paket) 47
javax.xml.stream (Paket) 47
jbucket 27
Jetty 397
JSON (JavaScript Object Notation) 5, 48,
142, 304
Ajax und 375
Kodierung und 311
Lesezeichen repräsentieren 209
json (Ruby Gem) 50
K
keys (S3) 57
Kodierungsfragen 309
Komma (,)
Fokus-Information 135
URI-Design und 265
Komprimierung 276
konditionales GET 157, 215, 277
Caching und 281
Kontrollfluss (vorkonfiguriert) 312
L
Last-Modified (HTTP-Header) 33, 157,
212, 461
konditionales GET und 215, 278
LBYL (Look-Before-You-Leap)-Requests 283
»Length Required« 411 Response-Code 445
les- und schreibbare Ressourcen-orientierte
Services 161
lesbare URIs 268
Lesezeichen 28
Controller für 199
Verwaltung für 204
libcurl 40
libgmail (Bibliothek) 363
libopenssl-ruby 34
libwww-perl (LWP) 42
libxml2 (Bibliothek) 44
PHP XML-Parsers und 47
li-HTML-Tag 296
limit-Parameter 217
link-Tag 328
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Linux, Bibliothek net/https installieren 34
Lisp 42
XML-Parser 48
Location (Response-Header) 283, 436, 461
Look-Before-You-Leap (LBYL)-Requests 283
Lovett, Chris 47
Low REST 24
LWP (libwww-perl) 42
M
Max-Forwards (Header) 462
Medientypen 8
Members (APP) 315
Metadaten 104
»Method Not Allowed« 405 Response-Code
442
Methoden 8
S3 60
Methoden-Information 8
Microformate mit XHMTL 297
Modellklassen 233
»Moved Permanently« 301 Response-Code
314, 431, 437
»Multiple Choices« 300 Response-Code 436
»Multi-Status« 207 Response-Code 435
MySQL 192
N
Max.
Linie
Namen für Ressourcen 133
Natürlichsprachige Beschreibung 238
.NET Common Language Runtime (CLR)
39, 47
net/http (Bibliothek) 34
Net::HTTP (Klasse) 35, 42
NetworkCredential 39
neue 186
Neueste Lesezeichen (Controller) 203
nicht autorisierter Zugriff 213
Nielsen, Jakob 268
»No Content«’ 204 Response-Code 434
Noelios Restlet Engine (NRE) 397
»Non-Authoritative Information« 203
Response-Code 434
»Not Acceptable« 406 Response-Code 443
»Not Found« 404 Response-Code 61, 159,
314, 431, 442
Not Found 404 Response-Code 213
»Not Implemented« 501 Response-Code
448
»Not Modified« 304 Response-Code 279,
438
Nottingham, Mark 324
NRE (Noelios Restlet Engine) 397
nur lesbare Ressourcen-orientierte Services
121
nur lesbare Web Services 19
O
Objekt (RDF assertion) 305
Objekte 4
S3 57, 69
objektorientiertes Design von S3 57
objekt-relationales Mapping (ORM) 410
»OK« 200 Response-Code 60, 156, 160,
314, 433
OK 200 Response-Code 212
OpenSearch 302
open-uri (Bibliothek) 33, 42
»Method Not Allowed« 405 Response-Code
324
OPTIONS (Methode) 32, 111
einheitliche Schnittstelle und 248
org.w3c.dom.* (Paket) 47
org.xml.sax.* (Paket) 47
ORM (objekt-relationales Mapping) 410
P
params (Parameter), Listen-ElementRessourcen verwenden 215
Park Place 86
Parser (XML) 42
»Partial Content« 206 Response-Code 435
Passwort 172
»Payment Required« 402 Response-Code
441
Perl 42
XML-Parser 48
permanente URIs 268
Pfade (URI) 7
Pfad-Variablen
Hierarchie kodieren 134
URIs entwerfen 264
PHP 40
XML-Parser 47
Pilgrim, Mark 274
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
477
Max.
Linie
Links
Max.
Linie
Plätze als Ressourcen 130
PNG-Format 143
POE (POST Once Exactly) 324
POE (Request-Header) 469
POE-Links (Header) 469
POST (Methode) 9, 32, 112, 180
ActiveResource-Clients und 84
APP-Ressourcen und 322
Benutzercontroller und 197
Caching und 283
einheitliche Schnittstelle und 248
Objekte erstellen 201
Once Exactly (POE) 324
Ressourcen erstellen/anhängen 314
Ruby-Controller und 393
S3 59
überladen 115, 249, 265
untergeordnete Ressourcen erstellen 181
versus PUT 249
Web-Anwendungen und Web Services
395
postNewAtomMember-Methode (Atom)
340
Pragma (Header) 462
»Precondition Failed« 412 Response-Code
445
Private Read Access Policy 79
private Schlüssel (S3 requests) 73
Privatsphäre (Benutzerkonten) 164
programmierbares Web 1
Technologien 20
Prototype 379
»Proxy Authentication Required« 407
Response-Code 443
Proxy-Authenticate (Header) 463
Proxy-Authorization (Header) 463
Proxy-Caches 96
ProxyPass 384
Public-Read Access Policy 79
Public-Write Access Policy 79
Pull-Parser 43
PUT (Methode) 9, 110
ActiveResource-Clients und 84
APP-Ressourcen und 322
Benutzercontroller und 197
Caching und 283
Datenbank-basierter Kontrollfluss und
313
einheitliche Schnittstelle und 247
478 | Index
HTTP-Bibliotheken und 32
Ruby-Controller und 394
S3 59, 71
S3::Bucket#put 66
Sicherheit und Idempotenz 116
Simulieren 286
überladen
PUT/DELETE, Simulieren 286
UsersController und 223
versus POST 113, 249
Web-Anwendungen und Web Services
395
Python
Clients 85
httplib2 36
XML-Parser 46
Q
Query-Strings 208
Query-Variablen 138
URI-Design und 265
R
Rails 391
Range (Request-Header) 463
RDF (Resource Description Framework)
304
Redirection 436
Redirect-Schleifen 33
Referer (Request-Header) 464
reguläre Ausdrücke (Django) 413
rel-Attribut (link-Tag) 328
rel-HTML-Attribut 296
rel-license Microformat Spezification 298
rel-nofollow Microformat Spezification 298
rel-tag Microformat Spezification 298
Remote Procedure Calls (RPC) 21
Repetition-Modell (XHTML) 155
Repräsentationen 103
Adressierbarkeit und 245
ausgehende 394
ausgehende/eintreffende 265
eintreffende 395
Entity-Body 7
Entwurf 140, 172, 207
Formate 295
S3 64
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Max.
Linie
»Request Entity Too Large« 413 ResponseCode 446
»Request Timeout« 408 Response-Code 444
»Requested Range Not Satisfiable« 416
Response-Code 447
Request-Header 7
Request-Signierung 72
»Request-URI Too Long« 414 ResponseCode 446
Resource Description Framework (RDF)
304
Response-Codes (HTTP) 8, 60, 156, 374,
429
Datenbank-basierter Kontrollfluss 314
responseXML-Parser (JavaScript) 47
Ressource
Entwurf 123
Formulare 326
Zustand 101, 141, 246
Ressourcen 59, 161, 393
Benutzerkonten 162
Beziehungen zwischen 259
Datensätze, aufteilen in 178
Design 258
Django, Views implementieren 413
URIs, Ressourcen benennen 178
Verbinden 211
Ressourcen, definieren 411
Ressourcen-orientierte Architekture (ROA)
14, 89
Adressierbarkeit 95
les- und schreibbar, Entwurf 161
Prozedur 244
Repräsentationen und 103
URIs 92
versus Dicke Web Services 343
REST (Representational State Transfer),
Repräsentationen senden 246
Restlet (Java) 189, 391, 396
Services schreiben 404
rest-open-uri, Installieren 34
rest-open-uri-Bibliothek 34
Retry-After (Response-Header) 464
rev-Attribute (link-Tag) 328
rev-HTML-Attribute 296
REXML 44
REXML::Dokumenten-Parser 34
ROA siehe Ressourcen-orientierte
Architektur 14
Routing (Rails) 392
RPC (Remote Procedure Calls) 21
RPC-Architekturen 15
Ruby
Amazon Web Services und 3
HTTP-Client-Bibliotheken 34
on Rails 391
XML-Parser und 44
S
S3 79
S3 (Simple Storage Service) 4, 55
Adressierbarkeit 96
Client 62
Bibliothek 79
Request-Signierung und Zugriffskontrolle 72
Verbindungshaftigkeit und 253
S3::Bucket#delete (Methode) 66
S3::Bucket#put (Methode) 66
s3sh (Befehlszeile für Ruby) 4, 27
SAX-Parser 42
Schlüssel-Wert-Paare 208, 303
Schrägstrich (/)
Django-»Hausstil« und 412
XPath 26
script-Tag 387
»Secret Access Key« (Amazon) 63
Secure Socket Layer siehe SSL 358
»See Other« 303 Response-Code 159, 438
SELECT-Anweisung (SQL) 84
Semikolon ( 135
Server-Fehler 447
Service 87
»Service Unavailable« 503 Response-Code
160, 177, 448
Service-Dokumente (APP) 316
Service-orientierte Architektur siehe SOA
361
Services 295
Restlet, schreiben 404
Service-Trampled REST (STREST) 23
Service-Versionierung 267
Session-Affinität 103
Sessions (HTTP) 101
Set-Cookie (Response-Header) 469
Sicherheit 356
Sicherheit (HTTP-Methoden) 116
Signaturen 357
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
479
Max.
Linie
Links
Simple Storage Service (S3) 4, 55
Adressierbarkeit 96
Client 62
Bibliothek 79
Request-Signierung und Zugriffskontrolle 72
Verbindungshaftigkeit und 253
simple-http (Common Lisp) 42
Slug (Request-Header) 469
SOA (Service-orientierte Architektur) 22,
361
SOAP 11, 21, 345
POST (Methode), überladen 249
REST als Konkurrenz 23
S3 und 60
Sicherheit und 356
SQL-Datenbanken 84, 313
SSL (Secure Sockets Layer) 358
Zertifikate 32
Standard-Bibliotheken 1
Standardisierung 240
Stapel-Operationen 261
startindex-Element (OpenSearch) 303
STREST (Service-Trampled REST) 23
Subject (RDF-Assertion) 304
Suchergebnisse, Listen darstellen 151
Sun Web Services Developer Pack 47
SVG-Format 143, 303
»Switching Protocols« 101 Response-Code
432
T
Max.
Linie
table-HTML-Tag 296
Tags 28
Verwaltung für 205
TagSoup XML-Parser 47
TCP/IP-Sockets 30
TE (Request-Header) 464
»Temporary Redirect« 307 Response-Code
439
Terminologie 24
Terminologie von Web Services 5
text/html (Medium) 296
text/xml (Medium) 311
TLS (Transport Layer Security) 358
to_xml (Rails) 210
Framework-spezifische SerialisierungsFormate 306
Ressourcen verbinden und 211
480 | Index
totalResults-Element (OpenSearch) 303
Totty, Brian 281
TRACE (Methode) 32
Trailer (Response-Header) 465
Transaktionen 262, 359
Transfer-Encoding (Header) 465
Transport Layer Security (TLS) 358
Triple (RDF-Assertion) 304
U
überladenes POST 115, 249
PUT/DELETE, simulieren 286
Sicherheit und Idempotenz 249
URI-Design und 265
UDDI 355
ul-HTML-Tag 296
»Unauthorized« 401 Response-Code 271,
177, 441
Unauthorized 401 Response-Code 213
Unicode 309
XML parsen und 46
Uniform-Klasse (Restlet) 398
Universal Encoding Detector 310
Universal Product Codes (UPCs) 15
Universal Resource Identifier siehe URIs 245
Universal Resource Identifiers-Axioms of
Web Architecture (Berners-Lee, Tim)
93
»Unsupported Media Type« 415 ResponseCode 177, 313, 446
Unsupported Media Type 415 ResponseCode 214
untergeordnete Ressourcen 179
Erstellen 112
HTTP POST-Requests, Erstellen mit 181
»Unused« 306 Response-Code 439
UPCs (Universal Product Codes) 15
UPDATE-Anweisung (SQL) 84
Upgrade (Request-Header) 465
URIs (Universal Resource Identifier) 1, 17,
20, 140
Adressierbarkeit und 245
Controller 202
Design 264
Django und 411
Lesezeichen und 28, 199
permanent versus lesbar 268
Ressourcen benennen 168, 178
ROAs und 92
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
Signieren 76
Templates 326
Web-Clients schreiben 26
URI-Templating 175
»URL as UI« (Nielsen, Jakob) 268
urllib2 HTTP-Client 36
URLs siehe URIs 1
US-ASCII-Kodierung 309
»Use Proxy« 305 Response-Code 439
User-Agent (Request-Header) 466
UsersController 223
UsersController#create (Rails-Methode)
197
UsersController#destroy (Rails-Methode)
197
UsersController#index (Rails-Methode)
197
UsersController#show (Rails-Methode) 197
UsersController#update (Rails-Methode)
197
UTF-8-Kodierung 309
V
Vary (Response-Header) 466
VBScript 364
vCard 307
Verbindungshaftigkeit 106, 247, 253
Service-Versionierung 267
Vertrauen (Benutzerkonten) 164
Verweise 65, 106
Hypermedia und 325
Ressourcen zu bestehenden Ressourcen
174, 183
S3-Clients und 253
XHTML 4 327
Via (Header) 467
4Suite 46
Views 393
Django, Ressourcen implementieren als
413
VirturalHost-Klasse (Restlet) 399
voreingestellte Kontrollflüsse 312
VoteLinks 298
W
Max.
Linie
W-*-Technologien 22
W3Cs HTML-Validator 199
WADL (Web Application Description
Language) 22, 27, 52, 81, 354
Hypermedia-Technologien und 326, 333
Warning (Response-Header) 467
Web Application Description Language siehe
WADL 22
Web Hypertext Application Technology
Working Group (WHATWG) 332
Web Service Description Language siehe
WSDL 11
Web Services Developer Pack (Sun) 47
WebDAV 32, 119
WeblogsController (Klasse) 392
Web-Schnittstellen- und -Anwendungen
289
Web-Service-Clients siehe Clients 25
Welt 46
Werte (S3) 57
WHATWG (Web Hypertext Application
Technology Working Group) 332
Windows-1252-Kodierung 309
Wrapper 27
Wrapper-Bibliotheken 25
WSDL (Web Service Description Language)
11, 22, 349
POST (Methode), überladen 249
WS-ReliableMessaging 358
WSSE HTTP-Authentication 33, 165, 274
WS-Security Extension siehe WSSE HTTPAuthentication 274
WWW-Authenticate (Header) 177, 468
Basic Authentication und 271
Digest Authentication und 272
WSSE HTTP-Authentication und 274
X
x-amz-acl (Header) 78
Xerces 47
XFN (XHTML Friends Network) 299
xFolk Microformat Spezification 300
XHTML 143, 296, 331
Ad-Hoc 306
Microformate 297
XHTML 4 327
X-HTTP-Method-Override (RequestHeader) 470
XMDP (XHTML Meta Data Profiles) 299
XML 5
ActiveRecord und 210
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
Max.
Linie
481
Links
Ad-Hoc-Vokabularien 308
Kodierung und 310
Parser 42
Repräsentation von Benutzerkonten 208
SOAP verwenden 345
XHTML und 296
XML-RPC-Requests und 16
XML for 48
xml.sax-Modul (Python) 46
XML::LibXML::Reader-Modul (Perl) 48
XML::SAX::PurePerl-Modul (Perl) 48
XML::Simple-Modul (Perl) 48
XML::XPath-Module (Perl) 48
xml_parser_create-Funktion (PHP) 47
XMLHttpRequest (JavaScript) 40, 47, 364,
373
Browser-übergreifende Themen und 378
XMLPull 47
XML-RPC 15, 21
POST (Methode), überladen 249
XOXO (Extensible Open XHTML Outlines)
299
XPath 10, 31, 402
S3 und 64
X-WSSE (Request-Header) 470
Y
YAGNI (You Aren’t Gonna Need It) 362
Yahoo!-Web Services 15
Benutzerkonten und 163
Z
Zeichenkodierung 309
Zugriffskontrolle 72
Zugriffsrichtlinien 78
Zustand siehe Zustandslosigkeit 246
Zustandslosigkeit 246, 251
Anwendungs-Zustand versus RessourcenZustand 101
ROA 98
zuverlässige Nachrichten 358
Max.
Linie
Max.
Linie
482 | Index
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Herunterladen