| Vorbemerkung zur dritten Auflage | 6 |
---|
| Vorbemerkung zur zweiten Auflage | 8 |
---|
| Vorwort zur ersten Auflage | 10 |
---|
| Danksagung | 12 |
---|
| 1 Einleitung | 22 |
---|
| 1.1 Warum REST? | 22 |
| 1.1.1 Lose Kopplung | 23 |
| 1.1.2 Interoperabilität | 24 |
| 1.1.3 Wiederverwendung | 24 |
| 1.1.4 Performance und Skalierbarkeit | 25 |
| 1.2 Zielgruppe und Voraussetzungen | 25 |
| 1.3 Zur Struktur des Buches | 26 |
| 2 Einführung in REST | 30 |
---|
| 2.1 Eine kurze Geschichte von REST | 30 |
| 2.2 Grundprinzipien | 32 |
| 2.3 Zusammenfassung | 40 |
| 3 Fallstudie: OrderManager | 42 |
---|
| 3.1 Fachlicher Hintergrund | 42 |
| 3.2 Ressourcen | 44 |
| 3.2.1 Bestellungen | 44 |
| 3.2.2 Bestellungen in unterschiedlichen Zuständen | 51 |
| 3.2.3 Stornierungen | 51 |
| 3.3 Repräsentationen | 53 |
| 3.4 Zusammenfassung | 54 |
| 4 Ressourcen | 56 |
---|
| 4.1 Ressourcen und Repräsentationen | 56 |
| 4.2 Ressourcendesign | 57 |
| 4.2.1 Primärressourcen | 58 |
| 4.2.2 Subressourcen | 59 |
| 4.2.3 Listen | 59 |
| 4.2.4 Projektionen | 60 |
| 4.2.5 Aggregationen | 60 |
| 4.2.6 Aktivitäten | 60 |
| 4.2.7 Konzept- und Informationsressourcen | 60 |
| 4.2.8 Evolutionäre Weiterentwicklung und YAGNI | 61 |
| 4.3 Ressourcenidentifikation und URIs | 61 |
| 4.3.1 URI, IRI, URL, URN, XRI? | 62 |
| 4.3.2 Anatomie einer HTTP-URI | 63 |
| 4.3.3 URI-Templates | 67 |
| 4.4 URI-Design | 68 |
| 4.4.1 URI-Entwurfsgrundsätze | 68 |
| 4.4.2 REST aus Versehen | 71 |
| 4.4.3 Stabile URIs | 72 |
| 4.5 Zusammenfassung | 73 |
| 5 Verben | 74 |
---|
| 5.1 Standardverben von HTTP 1.1 | 74 |
| 5.1.1 GET | 74 |
| 5.1.2 HEAD | 76 |
| 5.1.3 PUT | 77 |
| 5.1.4 POST | 78 |
| 5.1.5 DELETE | 78 |
| 5.1.6 OPTIONS | 79 |
| 5.1.7 TRACE und CONNECT | 79 |
| 5.2 HTTP-Verben in der Praxis | 79 |
| 5.3 Tricks für PUT und DELETE | 80 |
| 5.3.1 HTML-Formulare | 80 |
| 5.3.2 Firewalls und eingeschränkte Clients | 82 |
| 5.4 Definition eigener Methoden | 84 |
| 5.4.1 WebDAV | 84 |
| 5.4.2 Partial Updates und PATCH | 86 |
| 5.4.3 Multi-Request-Verarbeitung | 87 |
| 5.5 LINK und UNLINK | 89 |
| 5.6 Zusammenfassung | 90 |
| 6 Hypermedia | 92 |
---|
| 6.1 Hypermedia im Browser | 92 |
| 6.2 HATEOAS und das »Human Web« | 96 |
| 6.3 Hypermedia in der Anwendung-zu-Anwendung- Kommunikation | 98 |
| 6.4 Ressourcenverknüpfung | 99 |
| 6.5 Einstiegspunkte | 99 |
| 6.6 Aktionsrelationen | 101 |
| 6.7 Darstellung von Links und das | 101 |
| 6.7 Darstellung von Links und das | 101 |
---|
| 102 | 101 |
---|
| 6.8 Standardisierung von Link-Relationen | 105 |
| 6.9 Zusammenfassung | 106 |
| 7 Repräsentationsformate | 108 |
---|
| 7.1 Formate, Medientypen und Content Negotiation | 108 |
| 7.2 JSON | 109 |
| 7.2.1 HAL | 110 |
| 7.2.2 Collection+JSON | 113 |
| 7.2.3 SIREN | 115 |
| 7.2.4 Fazit | 117 |
| 7.3 XML | 118 |
| 7.4 HTML/XHTML | 119 |
| 7.5 Textformate | 122 |
| 7.5.1 Plaintext | 122 |
| 7.5.2 URI-Listen | 123 |
| 7.6 CSV | 123 |
| 7.7 RSS und Atom | 124 |
| 7.8 Binäre Formate | 126 |
| 7.9 Microformats | 127 |
| 7.10 RDF | 128 |
| 7.11 Zusammenfassung | 130 |
| 8 Fallstudie: AtomPub | 132 |
---|
| 8.1 Historie | 132 |
| 8.2 Discovery und Metadaten | 133 |
| 8.3 Ressourcentypen | 136 |
| 8.4 REST und Atom/AtomPub | 138 |
| 8.5 Zusammenfassung | 138 |
| 9 Sitzungen und Skalierbarkeit | 140 |
---|
| 9.1 Cookies | 141 |
| 9.2 Ressourcen- und Clientstatus | 143 |
| 9.3 Skalierbarkeit und »Shared Nothing«-Architektur | 145 |
| 9.4 Zusammenfassung | 147 |
| 10 Caching | 148 |
---|
| 10.1 Expirationsmodell | 148 |
| 10.2 Validierungsmodell | 150 |
| 10.3 Cache-Topologien | 152 |
| 10.4 Caching und Header | 155 |
| 10.4.1 Response-Header | 155 |
| 10.4.2 Request-Header | 156 |
| 10.5 Schwache ETags | 156 |
| 10.6 Invalidierung | 157 |
| 10.7 Caching und personalisierte Inhalte | 158 |
| 10.8 Caching im Internet | 158 |
| 10.9 Zusammenfassung | 159 |