Ralf Wirdemann
RESTful Go APIs
Design und Implementierung leichtgewichtiger Hypermedia Services
Inhalt
6
1 Einleitung
14
1.1 Alle bauen APIs
14
1.2 Web-Frameworks
15
1.3 Alle wollen Go
15
1.4 Warum REST?
16
1.5 Aufbau des Buches
17
1.6 Disclaimer
17
1.7 Gebrauchsanleitung
18
1.8 Code-Beispiele
18
2 Go
20
2.1 Installation
20
2.2 Der Go-Workspace
21
2.3 Test der Installation
22
2.4 Programmstruktur
22
2.5 Packages
23
2.6 Funktionen
24
2.7 Variablen
24
2.8 Typen
25
2.9 Schleifen
27
2.10 Verzweigungen
28
2.11 Methoden
30
2.12 Pointer
31
2.13 Interfaces
32
2.14 Arrays und Slices
34
2.14.1 Arrays
34
2.14.2 Slices
34
2.14.3 Polymorphe Arrays
36
2.15 Maps
36
2.16 Verzögerungen, Panic und Recover
37
2.17 Was sonst noch?
39
3 REST
40
3.1 Überblick
40
3.2 Ressourcen
42
3.3 Uniform Ressource Identifier
42
3.4 HTTP-Methoden
43
3.4.1 GET
43
3.4.2 POST
44
3.4.3 PUT
44
3.4.4 DELETE
44
3.4.5 PATCH
44
3.4.6 HEAD
44
3.4.7 OPTIONS
44
3.5 Repräsentationen
45
3.6 Statuscodes
45
3.6.1 2xx Erfolg
46
3.6.2 3xx Umleitung
46
3.6.3 4xx Client-Fehler
46
3.6.4 5xx Server-Fehler
46
3.7 Hypermedia
47
3.8 REST als Architekturstil
48
3.8.1 Client-Server
48
3.8.2 Zustandslosigkeit
48
3.8.3 Cacheability
49
3.8.4 Uniform Interface
49
3.8.5 Layered System
49
3.8.6 Code on Demand
50
3.9 Zusammenfassung
50
4 HTTP und JSON
52
4.1 Das Package net/http
52
4.1.1 Request Handling
52
4.1.2 Level-2-Services
56
4.2 Das Package encoding/json
58
4.2.1 JSON-Encoding
59
4.2.2 JSON-Decoding
61
4.3 HTTP und JSON
62
4.4 Abschluss
63
5 Restvoice
64
5.1 Vision
64
5.2 Use Cases
65
5.3 Domainmodell
66
5.4 Ressourcen
68
5.5 Kern-Use-Cases
68
5.5.1 Rechnung erstellen
70
5.5.2 Buchung zufügen
73
5.5.3 Buchung löschen
76
5.5.4 Rechnung abschließen
77
5.5.5 Rechnung zustellen
78
5.6 Kritik am Entwurf
79
5.6.1 Sicherheit
79
5.6.2 Testbarkeit
80
5.6.3 Kopplung
80
5.6.4 RESTfulness
81
5.7 Warum Go?
81
5.8 Abschluss
82
6 Design
84
6.1 Layering
85
6.2 Domain-driven Design
85
6.3 Hexagonale Architektur
86
6.3.1 Beispiel
88
6.3.2 Der Use Case ELIZA
88
6.3.3 Ports und Adapter
89
6.4 Use Case „Rechnung erstellen“
90
6.4.1 HTTP Invoice
91
6.4.2 Geschäftslogik
92
6.4.3 Invoice HTTP
93
6.4.4 Bootstrapping
93
6.5 Use Case „Tätigkeit buchen“
95
6.6 Use Case „Rechnung abschließen“
96
6.7 Use Case „Rechnung anfordern“
98
6.8 Was haben wir erreicht?
99
6.8.1 Entkopplung
100
6.8.2 Wartbarkeit
100
6.8.3 Testbarkeit
101
7 Testing
102
7.1 Unit Tests
102
7.2 Unit Tests in Go
103
7.3 HTTP-Tests in Go
105
7.4 Was testen?
106
7.5 Beispiel: Rechnung abschließen
107
7.5.1 Testszenario
108
7.5.2 Method under Test
108
7.5.3 Unit Test
110
7.5.4 Integrationstest
110
7.6 Fake- und Mock-Objekte
112
7.6.1 Fake-Objekte
112
7.6.2 Mock-Objekte
114
7.7 Unit Test mit Fake-Objekt
115
7.8 HTTP-Test
115
7.9 API-Test
116
7.10 Testseparation
118
7.10.1 Build Tags: -tags
118
7.10.2 Short Modus: -short
119
7.10.3 Einzelne Tests ausführen: -run
119
7.11 Test Coverage
119
7.12 Abschluss
121
8 Hypermedia als Motor
122
8.1 HATEOAS
123
8.2 Hypermedia Rechnungsstellung
123
8.2.1 Zustandsübergänge
124
8.2.2 Wie sage ich es meinem Client?
125
8.3 Hypertext Application Language
126
8.4 HAL in Go
129
8.4.1 Geschäftslogik
129
8.4.2 Media Type „application/hal+json“
130
8.5 Hypermedia-Clients
132
8.6 Resource Expansion
134
8.7 CRUD vs. Hypermedia
137
8.8 Abschluss
138
9 Sicherheit
140
9.1 Client-Authentifizierung
140
9.1.1 HTTP Basic
141
9.1.2 HTTP Digest
145
9.1.3 JSON Web Token
147
9.2 Server-Authentifizierung
152
9.3 Autorisierung
154
9.4 Verschlüsselung
156
9.5 Abschluss
157
10 Skalierbarkeit
160
10.1 Horizontale Skalierung
160
10.2 Zustandslosigkeit
161
10.2.1 Sitzungsstatus
161
10.2.2 Clientstatus
161
10.2.3 Ressourcenstatus
162
10.3 Restvoice skalieren
163
10.4 Vertikale Skalierung
163
10.4.1 Go-Routinen
164
10.4.2 Restvoice vertikal skalieren
164
10.5 Abschluss
166
11 Caching
168
11.1 Arten von Caches
168
11.1.1 Lokaler Cache
168
11.1.2 Proxy Cache
169
11.1.3 Reverse Proxy Cache
169
11.2 HTTP Caching
169
11.2.1 GET
169
11.2.2 Cachebare Responses
169
11.2.3 Cache-Validierung
170
11.2.4 Cache-Invalidierung
172
11.3 Restvoice Caching
172
11.4 Activity Caching
172
11.4.1 Cacheable Responses
172
11.4.2 Cache-Validierung
174
11.4.3 Invalidierung
176
11.4.4 Alternative ETags
177
11.5 Abschluss
177
12 Wie geht es weiter?
178
12.1 Danke!
178
12.2 Feedback
179
Literatur
180
Stichwortverzeichnis
182
© 2009-2024 ciando GmbH