Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Network Programming with Go
Nội dung xem thử
Mô tả chi tiết
Network
Programming
with Go
Essential Skills for Using and
Securing Networks
—
Jan Newmarch
Network Programming
with Go
Essential Skills for Using and
Securing Networks
Jan Newmarch
Network Programming with Go: Essential Skills for Using and Securing Networks
Jan Newmarch
Oakleigh, Victoria
Australia
ISBN-13 (pbk): 978-1-4842-2691-9 ISBN-13 (electronic): 978-1-4842-2692-6
DOI 10.1007/978-1-4842-2692-6
Library of Congress Control Number: 2017941517
Copyright © 2017 by Jan Newmarch
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol
with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only
in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are
not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director: Welmoed Spahr
Editorial Director: Todd Green
Acquisitions Editor: Steve Anglin
Development Editor: Matthew Moodie
Technical Reviewer: Ronald Petty
Coordinating Editor: Mark Powers
Copy Editor: Kezia Endsley
Compositor: SPi Global
Indexer: SPi Global
Artist: SPi Global
Cover image designed by Freepik
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
[email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC
and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM
Finance Inc is a Delaware corporation.
For information on translations, please e-mail [email protected], or visit http://www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book's product page, located at www.apress.com/9781484226919. For more
detailed information, please visit http://www.apress.com/source-code.
Printed on acid-free paper
iii
Contents at a Glance
About the Author ���������������������������������������������������������������������������������������������������xvii
About the Technical Reviewer ��������������������������������������������������������������������������������xix
Preface �������������������������������������������������������������������������������������������������������������������xxi
■Chapter 1: Architecture ����������������������������������������������������������������������������������������� 1
■Chapter 2: Overview of the Go Language ������������������������������������������������������������ 21
■Chapter 3: Socket-Level Programming���������������������������������������������������������������� 29
■Chapter 4: Data Serialization������������������������������������������������������������������������������� 57
■Chapter 5: Application-Level Protocols ��������������������������������������������������������������� 87
■Chapter 6: Managing Character Sets and Encodings ���������������������������������������� 107
■Chapter 7: Security�������������������������������������������������������������������������������������������� 121
■Chapter 8: HTTP������������������������������������������������������������������������������������������������� 137
■Chapter 9: Templates����������������������������������������������������������������������������������������� 161
■Chapter 10: A Complete Web Server������������������������������������������������������������������ 175
■Chapter 11: HTML ���������������������������������������������������������������������������������������������� 193
■Chapter 12: XML ������������������������������������������������������������������������������������������������ 199
■Chapter 13: Remote Procedure Call������������������������������������������������������������������� 209
■Chapter 14: REST����������������������������������������������������������������������������������������������� 221
■Chapter 15: WebSockets������������������������������������������������������������������������������������ 247
Afterword�������������������������������������������������������������������������������������������������������������� 267
Index��������������������������������������������������������������������������������������������������������������������� 269
v
Contents
About the Author ���������������������������������������������������������������������������������������������������xvii
About the Technical Reviewer ��������������������������������������������������������������������������������xix
Preface �������������������������������������������������������������������������������������������������������������������xxi
■Chapter 1: Architecture ����������������������������������������������������������������������������������������� 1
Protocol Layers����������������������������������������������������������������������������������������������������������������� 1
ISO OSI Protocol�������������������������������������������������������������������������������������������������������������������������������������� 2
OSI Layers����������������������������������������������������������������������������������������������������������������������������������������������� 2
TCP/IP Protocol��������������������������������������������������������������������������������������������������������������������������������������� 3
Some Alternative Protocols �������������������������������������������������������������������������������������������������������������������� 3
Networking����������������������������������������������������������������������������������������������������������������������� 3
Gateways�������������������������������������������������������������������������������������������������������������������������� 4
Packet Encapsulation������������������������������������������������������������������������������������������������������� 4
Connection Models����������������������������������������������������������������������������������������������������������� 5
Connection Oriented ������������������������������������������������������������������������������������������������������������������������������� 5
Connectionless ��������������������������������������������������������������������������������������������������������������������������������������� 5
Communications Models�������������������������������������������������������������������������������������������������� 5
Message Passing������������������������������������������������������������������������������������������������������������������������������������ 5
Remote Procedure Call��������������������������������������������������������������������������������������������������������������������������� 6
Distributed Computing Models����������������������������������������������������������������������������������������� 7
Client-Server System ������������������������������������������������������������������������������������������������������� 8
Client-Server Application�������������������������������������������������������������������������������������������������� 8
Server Distribution ����������������������������������������������������������������������������������������������������������� 9
■ Contents
vi
Communication Flows������������������������������������������������������������������������������������������������������ 9
Synchronous Communication��������������������������������������������������������������������������������������������������������������� 10
Asynchronous Communication ������������������������������������������������������������������������������������������������������������� 10
Streaming Communication ������������������������������������������������������������������������������������������������������������������� 10
Publish/Subscribe��������������������������������������������������������������������������������������������������������������������������������� 10
Component Distribution�������������������������������������������������������������������������������������������������� 10
Gartner Classification ��������������������������������������������������������������������������������������������������������������������������� 11
Three-Tier Models �������������������������������������������������������������������������������������������������������������������������������� 13
Fat versus Thin ������������������������������������������������������������������������������������������������������������������������������������� 14
Middleware Model���������������������������������������������������������������������������������������������������������� 14
Middleware Examples �������������������������������������������������������������������������������������������������������������������������� 14
Middleware Functions �������������������������������������������������������������������������������������������������������������������������� 15
Continuum of Processing ����������������������������������������������������������������������������������������������� 15
Points of Failure ������������������������������������������������������������������������������������������������������������� 16
Acceptance Factors�������������������������������������������������������������������������������������������������������� 16
Transparency������������������������������������������������������������������������������������������������������������������ 17
Access Transparency ���������������������������������������������������������������������������������������������������������������������������� 17
Location Transparency�������������������������������������������������������������������������������������������������������������������������� 17
Migration Transparency ������������������������������������������������������������������������������������������������������������������������ 17
Replication Transparency���������������������������������������������������������������������������������������������������������������������� 17
Concurrency Transparency ������������������������������������������������������������������������������������������������������������������� 17
Scalability Transparency����������������������������������������������������������������������������������������������������������������������� 17
Performance Transparency������������������������������������������������������������������������������������������������������������������� 18
Failure Transparency ���������������������������������������������������������������������������������������������������������������������������� 18
Eight Fallacies of Distributed Computing ����������������������������������������������������������������������� 18
Fallacy: The Network Is Reliable����������������������������������������������������������������������������������������������������������� 18
Fallacy: Latency Is Zero ������������������������������������������������������������������������������������������������������������������������ 19
Fallacy: Bandwidth Is Infinite���������������������������������������������������������������������������������������������������������������� 19
Fallacy: The Network Is Secure ������������������������������������������������������������������������������������������������������������ 19
■ Contents
vii
Fallacy: Topology Doesn’t Change �������������������������������������������������������������������������������������������������������� 19
Fallacy: There Is One Administrator������������������������������������������������������������������������������������������������������ 19
Fallacy: Transport Cost Is Zero�������������������������������������������������������������������������������������������������������������� 20
Fallacy: The Network Is Homogeneous������������������������������������������������������������������������������������������������� 20
Conclusion���������������������������������������������������������������������������������������������������������������������� 20
■Chapter 2: Overview of the Go Language ������������������������������������������������������������ 21
Types ������������������������������������������������������������������������������������������������������������������������������ 22
Slices and Arrays���������������������������������������������������������������������������������������������������������������������������������� 22
Structures��������������������������������������������������������������������������������������������������������������������������������������������� 22
Pointers ������������������������������������������������������������������������������������������������������������������������������������������������ 23
Functions���������������������������������������������������������������������������������������������������������������������������������������������� 23
Maps����������������������������������������������������������������������������������������������������������������������������������������������������� 24
Methods������������������������������������������������������������������������������������������������������������������������������������������������ 24
Multi-Threading�������������������������������������������������������������������������������������������������������������� 25
Packages������������������������������������������������������������������������������������������������������������������������ 25
Type Conversion ������������������������������������������������������������������������������������������������������������� 25
Statements��������������������������������������������������������������������������������������������������������������������� 25
GOPATH��������������������������������������������������������������������������������������������������������������������������� 25
Running Go Programs ���������������������������������������������������������������������������������������������������� 26
Standard Libraries���������������������������������������������������������������������������������������������������������� 26
Error Values �������������������������������������������������������������������������������������������������������������������� 26
Conclusion���������������������������������������������������������������������������������������������������������������������� 27
■Chapter 3: Socket-Level Programming���������������������������������������������������������������� 29
The TCP/IP Stack ������������������������������������������������������������������������������������������������������������ 29
IP Datagrams ���������������������������������������������������������������������������������������������������������������������������������������� 30
UDP������������������������������������������������������������������������������������������������������������������������������������������������������� 30
TCP ������������������������������������������������������������������������������������������������������������������������������������������������������� 30
Internet Addresses ��������������������������������������������������������������������������������������������������������� 30
IPv4 Addresses ������������������������������������������������������������������������������������������������������������������������������������� 31
IPv6 Addresses ������������������������������������������������������������������������������������������������������������������������������������� 31
■ Contents
viii
IP Address Type �������������������������������������������������������������������������������������������������������������� 32
The IPMask Type����������������������������������������������������������������������������������������������������������������������������������� 33
The IPAddr Type ������������������������������������������������������������������������������������������������������������������������������������36
Host Lookup������������������������������������������������������������������������������������������������������������������������������������������ 37
Services�������������������������������������������������������������������������������������������������������������������������� 38
Ports ����������������������������������������������������������������������������������������������������������������������������������������������������� 38
The TCPAddr Type ��������������������������������������������������������������������������������������������������������������������������������� 39
TCP Sockets ������������������������������������������������������������������������������������������������������������������� 40
TCP Client ��������������������������������������������������������������������������������������������������������������������������������������������� 40
A Daytime Server���������������������������������������������������������������������������������������������������������������������������������� 42
Multi-Threaded Server�������������������������������������������������������������������������������������������������������������������������� 44
Controlling TCP Connections ������������������������������������������������������������������������������������������ 46
Timeout������������������������������������������������������������������������������������������������������������������������������������������������� 46
Staying Alive����������������������������������������������������������������������������������������������������������������������������������������� 46
UDP Datagrams �������������������������������������������������������������������������������������������������������������� 47
Server Listening on Multiple Sockets����������������������������������������������������������������������������� 49
The Conn, PacketConn, and Listener Types�������������������������������������������������������������������� 49
Raw Sockets and the IPConn Type ��������������������������������������������������������������������������������� 52
Conclusion���������������������������������������������������������������������������������������������������������������������� 55
■Chapter 4: Data Serialization������������������������������������������������������������������������������� 57
Structured Data �������������������������������������������������������������������������������������������������������������� 57
Mutual Agreement���������������������������������������������������������������������������������������������������������� 59
Self-Describing Data ������������������������������������������������������������������������������������������������������ 59
ASN.1������������������������������������������������������������������������������������������������������������������������������ 60
ASN.1 Daytime Client and Server ��������������������������������������������������������������������������������������������������������� 66
JSON������������������������������������������������������������������������������������������������������������������������������� 68
A Client and Server������������������������������������������������������������������������������������������������������������������������������� 72
The Gob Package������������������������������������������������������������������������������������������������������������ 75
A Client and Server������������������������������������������������������������������������������������������������������������������������������� 78
■ Contents
ix
Encoding Binary Data as Strings������������������������������������������������������������������������������������ 81
Protocol Buffers�������������������������������������������������������������������������������������������������������������� 83
Installing and Compiling Protocol Buffers �������������������������������������������������������������������������������������������� 84
The Compiled personv3.pb.go File ������������������������������������������������������������������������������������������������������� 84
Using the Compiled Code���������������������������������������������������������������������������������������������������������������������� 85
Conclusion���������������������������������������������������������������������������������������������������������������������� 86
■Chapter 5: Application-Level Protocols ��������������������������������������������������������������� 87
Protocol Design �������������������������������������������������������������������������������������������������������������� 87
Why Should You Worry?�������������������������������������������������������������������������������������������������� 88
Version Control��������������������������������������������������������������������������������������������������������������� 88
The Web������������������������������������������������������������������������������������������������������������������������������������������������ 89
Message Format������������������������������������������������������������������������������������������������������������� 90
Data Format�������������������������������������������������������������������������������������������������������������������� 91
Byte Format������������������������������������������������������������������������������������������������������������������������������������������ 91
Character Format���������������������������������������������������������������������������������������������������������������������������������� 92
A Simple Example ���������������������������������������������������������������������������������������������������������� 92
A Standalone Application���������������������������������������������������������������������������������������������������������������������� 93
The Client-Server Application��������������������������������������������������������������������������������������������������������������� 94
The Client Side�������������������������������������������������������������������������������������������������������������������������������������� 94
Alternative Presentation Aspects���������������������������������������������������������������������������������������������������������� 95
The Server Side ������������������������������������������������������������������������������������������������������������������������������������ 95
Protocol: Informal ��������������������������������������������������������������������������������������������������������������������������������� 95
Text Protocol����������������������������������������������������������������������������������������������������������������������������������������� 96
Server Code������������������������������������������������������������������������������������������������������������������������������������������ 97
Client Code ������������������������������������������������������������������������������������������������������������������������������������������� 99
Textproto Package ������������������������������������������������������������������������������������������������������������������������������ 101
State Information ��������������������������������������������������������������������������������������������������������� 101
Application State Transition Diagram ������������������������������������������������������������������������������������������������� 103
Client State Transition Diagrams �������������������������������������������������������������������������������������������������������� 104
■ Contents
x
Server State Transition Diagrams ������������������������������������������������������������������������������������������������������� 105
Server Pseudocode����������������������������������������������������������������������������������������������������������������������������� 105
Conclusion�������������������������������������������������������������������������������������������������������������������� 106
■Chapter 6: Managing Character Sets and Encodings ���������������������������������������� 107
Definitions �������������������������������������������������������������������������������������������������������������������� 108
Character�������������������������������������������������������������������������������������������������������������������������������������������� 108
Character Repertoire/Character Set ��������������������������������������������������������������������������������������������������� 108
Character Code����������������������������������������������������������������������������������������������������������������������������������� 108
Character Encoding ���������������������������������������������������������������������������������������������������������������������������� 108
Transport Encoding����������������������������������������������������������������������������������������������������������������������������� 109
ASCII����������������������������������������������������������������������������������������������������������������������������� 109
ISO 8859����������������������������������������������������������������������������������������������������������������������� 111
Unicode ������������������������������������������������������������������������������������������������������������������������ 111
UTF-8, Go, and Runes ��������������������������������������������������������������������������������������������������� 112
UTF-8 Client and Server ��������������������������������������������������������������������������������������������������������������������� 112
ASCII Client and Server����������������������������������������������������������������������������������������������������������������������� 113
UTF-16 and Go�������������������������������������������������������������������������������������������������������������� 113
Little-Endian and Big-Endian�������������������������������������������������������������������������������������������������������������� 113
UTF-16 Client and Server ������������������������������������������������������������������������������������������������������������������� 114
Unicode Gotchas ���������������������������������������������������������������������������������������������������������� 116
ISO 8859 and Go����������������������������������������������������������������������������������������������������������� 117
Other Character Sets and Go���������������������������������������������������������������������������������������� 119
Conclusion�������������������������������������������������������������������������������������������������������������������� 119
■Chapter 7: Security�������������������������������������������������������������������������������������������� 121
ISO Security Architecture ��������������������������������������������������������������������������������������������� 121
Functions and Levels�������������������������������������������������������������������������������������������������������������������������� 122
Mechanisms ��������������������������������������������������������������������������������������������������������������������������������������� 123
Data Integrity���������������������������������������������������������������������������������������������������������������� 124
Symmetric Key Encryption ������������������������������������������������������������������������������������������� 126
Public Key Encryption��������������������������������������������������������������������������������������������������� 127
■ Contents
xi
X.509 Certificates��������������������������������������������������������������������������������������������������������� 129
TLS ������������������������������������������������������������������������������������������������������������������������������� 132
A Basic Client�������������������������������������������������������������������������������������������������������������������������������������� 132
Server Using a Self-Signed Certificate ����������������������������������������������������������������������������������������������� 133
Conclusion�������������������������������������������������������������������������������������������������������������������� 136
■Chapter 8: HTTP������������������������������������������������������������������������������������������������� 137
URLs and Resources ���������������������������������������������������������������������������������������������������� 137
I18n����������������������������������������������������������������������������������������������������������������������������������������������������� 137
HTTP Characteristics �������������������������������������������������������������������������������������������������������������������������� 138
Versions���������������������������������������������������������������������������������������������������������������������������������������������� 138
HTTP 0.9 ��������������������������������������������������������������������������������������������������������������������������������������������� 138
HTTP 1.0 ��������������������������������������������������������������������������������������������������������������������������������������������� 139
HTTP 1.1 ��������������������������������������������������������������������������������������������������������������������������������������������� 140
HTTP/2 ������������������������������������������������������������������������������������������������������������������������������������������������ 141
Simple User Agents ������������������������������������������������������������������������������������������������������ 141
The Response Type����������������������������������������������������������������������������������������������������������������������������� 141
The HEAD Method������������������������������������������������������������������������������������������������������������������������������� 142
The GET Method ��������������������������������������������������������������������������������������������������������������������������������� 143
Configuring HTTP Requests������������������������������������������������������������������������������������������ 145
The Client Object���������������������������������������������������������������������������������������������������������� 147
Proxy Handling ������������������������������������������������������������������������������������������������������������� 149
Simple Proxy��������������������������������������������������������������������������������������������������������������������������������������� 149
Authenticating Proxy �������������������������������������������������������������������������������������������������������������������������� 151
HTTPS Connections by Clients�������������������������������������������������������������������������������������� 153
Servers������������������������������������������������������������������������������������������������������������������������� 155
File Server ������������������������������������������������������������������������������������������������������������������������������������������ 155
Handler Functions������������������������������������������������������������������������������������������������������������������������������� 156
Bypassing the Default Multiplexer������������������������������������������������������������������������������������������������������ 158
HTTPS��������������������������������������������������������������������������������������������������������������������������� 159
Conclusion�������������������������������������������������������������������������������������������������������������������� 160
■ Contents
xii
■Chapter 9: Templates����������������������������������������������������������������������������������������� 161
Inserting Object Values������������������������������������������������������������������������������������������������� 161
Using Templates ��������������������������������������������������������������������������������������������������������������������������������� 162
Pipelines����������������������������������������������������������������������������������������������������������������������� 164
Defining Functions ������������������������������������������������������������������������������������������������������� 165
Variables����������������������������������������������������������������������������������������������������������������������� 167
Conditional Statements ������������������������������������������������������������������������������������������������ 168
The HTML /Template Package�������������������������������������������������������������������������������������� 173
Conclusion�������������������������������������������������������������������������������������������������������������������� 173
■Chapter 10: A Complete Web Server������������������������������������������������������������������ 175
Browser Site Diagram �������������������������������������������������������������������������������������������������� 175
Browser Files ��������������������������������������������������������������������������������������������������������������� 177
Basic Server����������������������������������������������������������������������������������������������������������������� 177
The listFlashCards Function ����������������������������������������������������������������������������������������� 179
The manageFlashCards Function��������������������������������������������������������������������������������� 181
The Chinese Dictionary ������������������������������������������������������������������������������������������������ 181
The Dictionary Type ��������������������������������������������������������������������������������������������������������������������������� 182
Flashcard Sets�������������������������������������������������������������������������������������������������������������� 183
Fixing Accents �������������������������������������������������������������������������������������������������������������� 184
The ListWords Function������������������������������������������������������������������������������������������������ 187
The showFlashCards Function ������������������������������������������������������������������������������������� 189
Presentation on the Browser���������������������������������������������������������������������������������������� 191
Running the Server ������������������������������������������������������������������������������������������������������ 191
Conclusion�������������������������������������������������������������������������������������������������������������������� 191
■Chapter 11: HTML ���������������������������������������������������������������������������������������������� 193
The Go HTML/Template Package���������������������������������������������������������������������������������� 194
Tokenizing HTML ���������������������������������������������������������������������������������������������������������� 195
XHTML/HTML���������������������������������������������������������������������������������������������������������������� 197
■ Contents
xiii
JSON����������������������������������������������������������������������������������������������������������������������������� 198
Conclusion�������������������������������������������������������������������������������������������������������������������� 198
■Chapter 12: XML ������������������������������������������������������������������������������������������������ 199
Parsing XML ����������������������������������������������������������������������������������������������������������������� 200
The StartElement Type������������������������������������������������������������������������������������������������������������������������ 200
The EndElement Type ������������������������������������������������������������������������������������������������������������������������� 200
The CharData Type������������������������������������������������������������������������������������������������������������������������������ 200
The Comment Type ����������������������������������������������������������������������������������������������������������������������������� 200
The ProcInst Type ������������������������������������������������������������������������������������������������������������������������������� 201
The Directive Type ������������������������������������������������������������������������������������������������������������������������������ 201
Unmarshalling XML ������������������������������������������������������������������������������������������������������ 203
Marshalling XML����������������������������������������������������������������������������������������������������������� 206
XHTML �������������������������������������������������������������������������������������������������������������������������� 207
HTML ���������������������������������������������������������������������������������������������������������������������������� 207
Conclusion�������������������������������������������������������������������������������������������������������������������� 207
■Chapter 13: Remote Procedure Call������������������������������������������������������������������� 209
Go’s RPC����������������������������������������������������������������������������������������������������������������������� 210
HTTP RPC Server �������������������������������������������������������������������������������������������������������������������������������� 212
HTTP RPC Client���������������������������������������������������������������������������������������������������������������������������������� 213
TCP RPC Server ���������������������������������������������������������������������������������������������������������������������������������� 214
TCP RPC Client������������������������������������������������������������������������������������������������������������������������������������ 216
Matching Values ��������������������������������������������������������������������������������������������������������������������������������� 217
JSON����������������������������������������������������������������������������������������������������������������������������� 217
JSON RPC Server�������������������������������������������������������������������������������������������������������������������������������� 218
JSON RPC Client ��������������������������������������������������������������������������������������������������������������������������������� 219
Conclusion�������������������������������������������������������������������������������������������������������������������� 220
■Chapter 14: REST����������������������������������������������������������������������������������������������� 221
URIs and Resources ����������������������������������������������������������������������������������������������������� 221
Representations ����������������������������������������������������������������������������������������������������������� 222
■ Contents
xiv
REST Verbs ������������������������������������������������������������������������������������������������������������������� 223
The GET Verb �������������������������������������������������������������������������������������������������������������������������������������� 223
The PUT Verb �������������������������������������������������������������������������������������������������������������������������������������� 223
The DELETE Verb��������������������������������������������������������������������������������������������������������������������������������� 224
The POST Verb ������������������������������������������������������������������������������������������������������������������������������������ 224
No Maintained State����������������������������������������������������������������������������������������������������� 224
HATEOAS ���������������������������������������������������������������������������������������������������������������������� 224
Representing Links������������������������������������������������������������������������������������������������������� 225
Transactions with REST������������������������������������������������������������������������������������������������ 226
The Richardson Maturity Model ����������������������������������������������������������������������������������� 227
Flashcards Revisited ���������������������������������������������������������������������������������������������������� 228
URLs ��������������������������������������������������������������������������������������������������������������������������������������������������� 228
The Demultiplexer (Demuxer)��������������������������������������������������������������������������������������� 229
Content Negotiation������������������������������������������������������������������������������������������������������ 230
GET /��������������������������������������������������������������������������������������������������������������������������������������������������� 232
POST /������������������������������������������������������������������������������������������������������������������������������������������������� 233
Handling Other URLs ���������������������������������������������������������������������������������������������������� 234
The Complete Server���������������������������������������������������������������������������������������������������� 234
Client ���������������������������������������������������������������������������������������������������������������������������� 240
Using REST or RPC ������������������������������������������������������������������������������������������������������� 245
Conclusion�������������������������������������������������������������������������������������������������������������������� 245
■Chapter 15: WebSockets������������������������������������������������������������������������������������ 247
WebSockets Server������������������������������������������������������������������������������������������������������ 248
The Go Sub-Repository Package���������������������������������������������������������������������������������� 248
The Message Object ��������������������������������������������������������������������������������������������������������������������������� 248
The JSON Object��������������������������������������������������������������������������������������������������������������������������������� 251
The Codec Type����������������������������������������������������������������������������������������������������������������������������������� 254
WebSockets Over TLS������������������������������������������������������������������������������������������������������������������������� 257
WebSockets in an HTML Page������������������������������������������������������������������������������������������������������������ 259
■ Contents
xv
The Gorilla Package������������������������������������������������������������������������������������������������������ 263
Echo Server ���������������������������������������������������������������������������������������������������������������������������������������� 264
Echo Client������������������������������������������������������������������������������������������������������������������������������������������ 265
Conclusion�������������������������������������������������������������������������������������������������������������������� 266
Afterword�������������������������������������������������������������������������������������������������������������� 267
Index��������������������������������������������������������������������������������������������������������������������� 269