|
|
1 | (10) |
|
The Virtues of the Way of the Cloud |
|
|
2 | (6) |
|
|
2 | (1) |
|
Test First, Test Everything |
|
|
3 | (2) |
|
Release Early, Release Often |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
7 | (1) |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
8 | (1) |
|
Easy Automation and IDE Freedom |
|
|
9 | (1) |
|
|
9 | (2) |
|
|
11 | (6) |
|
The Right Tools for the Job |
|
|
11 | (1) |
|
|
12 | (2) |
|
|
12 | (1) |
|
Installing the Git Client |
|
|
13 | (1) |
|
Installing Mercurial and Bazaar |
|
|
13 | (1) |
|
Creating a GitHub Account |
|
|
13 | (1) |
|
|
14 | (1) |
|
Configuring your Go Workspace |
|
|
14 | (1) |
|
|
15 | (1) |
|
|
16 | (1) |
|
|
17 | (18) |
|
|
18 | (1) |
|
|
19 | (3) |
|
|
22 | (3) |
|
Introducing Go Interfaces |
|
|
25 | (1) |
|
Adding Methods to Structs |
|
|
25 | (3) |
|
Exploiting Dynamic Typing in Go with Interfaces |
|
|
26 | (2) |
|
Working with Third-Party Packages |
|
|
28 | (2) |
|
Creating Your Own Packages |
|
|
30 | (4) |
|
Exporting Functions and Data |
|
|
31 | (1) |
|
|
31 | (3) |
|
|
34 | (1) |
|
4 Delivering Continuously |
|
|
35 | (18) |
|
|
36 | (3) |
|
|
36 | (1) |
|
|
36 | (2) |
|
|
38 | (1) |
|
Continuous Integration with Wercker |
|
|
39 | (11) |
|
Continuous Integration Best Practices |
|
|
39 | (1) |
|
|
40 | (1) |
|
Creating a Wercker Application |
|
|
41 | (1) |
|
Installing the Wercker CLI |
|
|
42 | (1) |
|
Creating a Wercker Configuration File |
|
|
43 | (4) |
|
|
47 | (2) |
|
|
49 | (1) |
|
Reader Exercise: Create a Full Development Pipeline |
|
|
50 | (2) |
|
Advanced Challenge: Integrate Third-Party Library |
|
|
52 | (1) |
|
|
52 | (1) |
|
5 Building Microservices in Go |
|
|
53 | (18) |
|
Designing Services API First |
|
|
54 | (3) |
|
Designing the Matches API |
|
|
54 | (1) |
|
Creating an API Blueprint |
|
|
54 | (2) |
|
Testing and Publishing Documentation with Apiary |
|
|
56 | (1) |
|
Scaffolding a Microservice |
|
|
57 | (3) |
|
Building Services Test First |
|
|
60 | (8) |
|
Creating a First, Failing Test |
|
|
61 | (3) |
|
Testing the Location Header |
|
|
64 | (1) |
|
Epic Montage---Test Iterations |
|
|
65 | (3) |
|
Deploying and Running in the Cloud |
|
|
68 | (2) |
|
|
68 | (1) |
|
|
68 | (1) |
|
|
69 | (1) |
|
|
70 | (1) |
|
|
71 | (24) |
|
Designing Service Ecosystems |
|
|
72 | (1) |
|
Building Dependent Services Test-First |
|
|
73 | (11) |
|
Creating the Fulfillment Service |
|
|
74 | (3) |
|
Creating the Catalog Service |
|
|
77 | (7) |
|
Sharing Structured Data Among Services |
|
|
84 | (2) |
|
Client Imports Server Package |
|
|
84 | (1) |
|
Client Duplicates Server Structure |
|
|
84 | (1) |
|
Client And Server Import Shared Package |
|
|
85 | (1) |
|
Using Service Bindings to Externalize URLs and Metadata |
|
|
86 | (3) |
|
|
89 | (3) |
|
Dynamic Service Discovery |
|
|
90 | (1) |
|
Service Discovery with Netflix's Eureka |
|
|
90 | (2) |
|
|
92 | (1) |
|
|
93 | (1) |
|
|
93 | (2) |
|
7 Creating a Data Service |
|
|
95 | (18) |
|
Creating a MongoDB Match Repository |
|
|
96 | (7) |
|
|
96 | (1) |
|
Updating the Repository Pattern |
|
|
96 | (1) |
|
Communicating with MongoDB in Go |
|
|
97 | (1) |
|
Writing a MongoDB Repository Test-First |
|
|
98 | (5) |
|
Integration Testing a Mongo-Backed Service |
|
|
103 | (7) |
|
Integrating with a Transient MongoDB Database |
|
|
103 | (3) |
|
Writing an Integration Test |
|
|
106 | (4) |
|
|
110 | (2) |
|
Configuring a Backing Service |
|
|
110 | (2) |
|
|
112 | (1) |
|
8 Event Sourcing and CQRS |
|
|
113 | (24) |
|
|
114 | (3) |
|
|
115 | (1) |
|
|
115 | (1) |
|
|
116 | (1) |
|
Replayable and Recoverable |
|
|
116 | (1) |
|
|
117 | (1) |
|
Embracing Eventual Consistency |
|
|
117 | (1) |
|
Introducing Command Query Responsibility Segregation |
|
|
118 | (2) |
|
|
120 | (1) |
|
|
120 | (1) |
|
|
121 | (1) |
|
Social Media Feed Processing |
|
|
121 | (1) |
|
Code Sample: Managing a Drone Army |
|
|
121 | (1) |
|
Creating a Command Handler Service |
|
|
122 | (6) |
|
|
122 | (4) |
|
Building the Command Handler Service |
|
|
126 | (2) |
|
Building the Event Processor |
|
|
128 | (5) |
|
Integration Testing the Event Processor |
|
|
133 | (1) |
|
Creating the Query Handler Service |
|
|
133 | (2) |
|
|
135 | (2) |
|
9 Building a Web Application with Go |
|
|
137 | (14) |
|
Serving Static Files and Assets |
|
|
138 | (1) |
|
Supporting JavaScript Clients |
|
|
139 | (3) |
|
Using Server-Side Templates |
|
|
142 | (3) |
|
|
145 | (1) |
|
Working with Cookies and Session State |
|
|
145 | (2) |
|
|
146 | (1) |
|
|
147 | (1) |
|
Build and Deploy with Wercker |
|
|
147 | (2) |
|
|
149 | (2) |
|
|
151 | (16) |
|
Securing a Web Application |
|
|
151 | (9) |
|
Web Application Security Options |
|
|
152 | (1) |
|
Setting up an AuthO Account |
|
|
153 | (1) |
|
Building an OAuth-Secured Web App |
|
|
154 | (4) |
|
Running the SecureWeb Application |
|
|
158 | (2) |
|
|
160 | (3) |
|
Overview of the Client Credentials Pattern |
|
|
160 | (1) |
|
Securing a Microservice with Client Credentials |
|
|
161 | (2) |
|
|
163 | (1) |
|
A Word on Privacy and Data Security |
|
|
163 | (2) |
|
Hackers Can't Get What You Don't Have |
|
|
164 | (1) |
|
|
165 | (1) |
|
|
166 | (1) |
|
11 Working with WebSockets |
|
|
167 | (10) |
|
|
168 | (2) |
|
|
168 | (1) |
|
WebSockets vs. Server-Sent Events |
|
|
169 | (1) |
|
Designing a WebSocket Server |
|
|
169 | (1) |
|
On WebSockets and Cloud Nativity |
|
|
170 | (2) |
|
Building a WebSocket App with a Messaging Provider |
|
|
172 | (4) |
|
A Note on JavaScript Frameworks |
|
|
175 | (1) |
|
Running the WebSockets Sample |
|
|
175 | (1) |
|
|
176 | (1) |
|
12 Building Web Views with React |
|
|
177 | (18) |
|
JavaScript State of the Union |
|
|
178 | (1) |
|
|
178 | (3) |
|
|
179 | (1) |
|
|
180 | (1) |
|
|
180 | (1) |
|
|
180 | (1) |
|
|
181 | (1) |
|
Anatomy of a React Application |
|
|
181 | (3) |
|
|
181 | (1) |
|
|
182 | (1) |
|
|
183 | (1) |
|
Understanding JSX and Webpack |
|
|
183 | (1) |
|
|
184 | (1) |
|
Building a Simple React Application |
|
|
184 | (8) |
|
|
191 | (1) |
|
Testing React Applications |
|
|
192 | (1) |
|
|
192 | (1) |
|
|
192 | (1) |
|
|
193 | (1) |
|
|
193 | (1) |
|
|
193 | (2) |
|
13 Creating UIs that Scale with Flux |
|
|
195 | (14) |
|
|
195 | (3) |
|
|
196 | (1) |
|
|
196 | (1) |
|
|
197 | (1) |
|
|
197 | (1) |
|
|
197 | (1) |
|
|
197 | (1) |
|
Building a Flux Application |
|
|
198 | (9) |
|
|
207 | (2) |
|
14 Creating a Full Application---World of FluxCraft |
|
|
209 | (14) |
|
Introducing World of FluxCraft |
|
|
210 | (1) |
|
|
211 | (3) |
|
Independent Scaling, Versioning, and Deployment |
|
|
213 | (1) |
|
Databases are not the Integration Tier |
|
|
213 | (1) |
|
One-Way Immutable Data Flow |
|
|
213 | (1) |
|
|
214 | (3) |
|
|
215 | (1) |
|
Sample Player Move Sequence |
|
|
216 | (1) |
|
|
217 | (1) |
|
|
218 | (1) |
|
|
219 | (1) |
|
|
219 | (1) |
|
Automating Acceptance Tests |
|
|
220 | (2) |
|
|
222 | (1) |
|
|
223 | (4) |
|
|
223 | (2) |
|
Go Isn't Just a Niche Language |
|
|
223 | (1) |
|
How Micro Should a Microservice Be? |
|
|
224 | (1) |
|
Continuous Delivery and Deployment |
|
|
224 | (1) |
|
|
224 | (1) |
|
Release Early, Release Often |
|
|
224 | (1) |
|
Event Sourcing, CQRS, and More Acronyms |
|
|
225 | (1) |
|
|
225 | (2) |
A Troubleshooting Cloud Applications |
|
227 | (4) |
Index |
|
231 | |