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.