RESTful Go APIs - Design und Implementierung leichtgewichtiger Hypermedia Services

Ralf Wirdemann

RESTful Go APIs

Design und Implementierung leichtgewichtiger Hypermedia Services

2019

194 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  34,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446459786

 

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