
文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载本文以《Build Web Application with Golang》日文版第 8 章ja/08.0.md为核心骨架系统梳理 Web 服务的技术本质、REST 与 SOAP 两大范式的取舍以及 Go 语言实现网络服务的四条主力路径——Socket、WebSocket、RESTful API 与 RPC。读者读完本篇可获得一张清晰的技术地图知道每一类 Web 服务解决什么问题、在 Go 生态中对应哪些标准库与第三方库、该阅读哪些配套章节深入实战。什么是 Web 服务HTTP 之上的信息交换Web 服务Web Service是建立在 HTTP 协议基础之上、以 XML 或 JSON 等标准格式进行信息交换的一种服务形态。它的核心价值在于开发者无需关心对方系统的实现语言与运行平台只需通过标准化的开放接口即可获取远程数据。原文档给出了一组非常贴近生活的场景来帮助理解这个概念查询上海原文示例的天气预报获取某石化公司原文示例的股票价格读取某电商平台原文示例商店中的商品信息这些需求都可以通过编写少量代码、经由标准开放接口一次性取得。从调用者的体验来看远程获取这些信息与本地调用一个函数并得到一个返回值几乎没有差别——这正是 Web 服务设计的目标把跨网络的远程数据访问抽象成一次普通调用。平台无关性Web 服务的后端关键Web 服务后端最关键的属性是平台无关性Platform Independence。你的服务可以在 Linux 系统上运行却可以毫无障碍地与运行在 Windows 上的 ASP.NET 程序交互也可以通过同一个接口与运行在 FreeBSD 上的 JSP 程序通信。这种解耦能力来自两方面传输层统一所有交互都建立在 HTTP 这一通用协议之上数据层标准化消息体采用 XML / JSON 等与语言无关的文本格式编码双方只需约定数据结构的解析规则。正是这种语言无关、平台无关的契约让异构系统之间的集成成为可能也使得 Web 服务成为分布式系统与微服务架构的基石。两大主流范式REST 与 SOAP当前主流的 Web 服务技术主要有两类REST与SOAP。原文档对此给出了清晰的定位与取舍判断。REST直观、基于 HTTP 扩展REST 请求非常直观因为它本质上是HTTP 协议的追加与利用每一个 REST 请求就是一个 HTTP 请求服务器根据不同的 HTTP method动词分发到不同的处理逻辑。绝大多数 Web 开发者对 HTTP 协议都相当熟悉因此学习 REST 的曲线相对平缓。REST 的核心思想详见 ja/08.3.md可以浓缩为三条每个 URI 代表一个资源图片、文档、视频、用户……客户端与服务器之间传输的是资源的某种表现层Representation具体格式由 HTTP 头部的Accept与Content-Type字段约定例如同一份文本可以表现为 html、json、xml客户端通过 GET、POST、PUT、DELETE 四个 HTTP 动词完成对资源的操作实现表现层状态转移——GET 获取资源、POST 创建资源也可用于更新、PUT 更新资源、DELETE 删除资源。此外 REST 还有两条重要约束请求间无状态Stateless——每个请求必须携带自身所需的全部信息服务器重启不会影响客户端且请求可由任意可用服务器应答天然适配云计算环境以及系统分层解耦——每个模块只能与其直接交互的层耦合从而降低整体复杂度。SOAP功能完备但过于复杂SOAP 是 W3C 制定的跨网络信息传递与远程计算机函数调用规范之一规则体系完整、标准化程度高但非常复杂完整规范篇幅很长且内容仍在持续扩充。原文档明确指出Go 语言以简洁著称因此本书不介绍 SOAP 这样复杂的协议作为替代Go 语言天生提供了非常优秀的、开发便捷的RPC 机制这正是 ja/08.4.md 的主题。也就是说在远程过程调用这一需求上Go 生态选择了更轻量的 RPC 而不是沉重的 SOAP。Go 的四大 Web 服务实现路径原文档将 Go 语言形容为21 世纪的 C 语言追求性能与简洁。本章为开发者规划了四条由浅入深的网络服务实现路径分别对应四个小节路径一Socket 编程8.1 节许多低层网络应用开发者眼中一切程序都像 Socket。浏览器与 Web 服务器、QQ 与聊天服务器、流媒体客户端与视频服务器……几乎所有的网络通信最终都依赖 Socket。因此 Socket 编程在现代编程中占据重要地位。什么是 Socket起源于 Unix一切皆文件哲学遵循打开 open → 读写 write/read → 关闭 close的操作模式。Socket()返回一个 int 型 Socket 描述符后续的连接与数据传输都经由它完成。常用类型有流式 SocketSOCK_STREAM面向连接的 TCP与数据报 SocketSOCK_DGRAM无连接的 UDP。如何标识通信双方网络层IP 地址唯一标识主机传输层协议 端口唯一标识进程(IP 地址、协议、端口) 三元组即可唯一定位网络中的进程。Go 的 IP 支持net包定义了type IP []byteParseIP(s string) IP可将 IPv4 / IPv6 字符串转换为 IP 类型。TCP 编程核心类型TCPConn读写通道、TCPAddr{IP, Port}ResolveTCPAddr解析地址DialTCP建立客户端连接ListenTCPAccept实现服务端监听。书中给出了 HEAD 请求客户端、7777/1200 端口时间同步服务、goroutine 并发化、SetReadDeadline超时与长连接等多段可直接运行的完整示例。UDP 编程ResolveUDPAddr、DialUDP、ListenUDP、ReadFromUDP、WriteToUDP与 TCP 的差别主要在于服务端缺少Accept代码结构几乎一一对应。详细实战代码请阅读 ja/08.1.md。路径二WebSocket8.2 节WebSocket 是 HTML5 的重要特性它实现了基于浏览器的远程 Socket让浏览器与服务器可以进行全双工通信Firefox、Google Chrome、Safari 等主流浏览器早已支持。为什么需要它此前实现实时通信只能靠轮询——浏览器按固定时间间隔反复发送 HTTP 请求服务器返回最新数据后页面重载。轮询会持续占用大量带宽。WebSocket 则只需一次带特殊包头含Sec-WebSocket-Key等头字段的 HTTP 握手即可建立并保持连接通道之后可用 JavaScript 直接读写该连接就像操作普通 TCP Socket。协议原理握手成功后数据帧以\x00开头、以\xFF结尾服务端将请求头中的Sec-WebSocket-Key与固定 GUID 字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接依次做 SHA-1 哈希与 Base64 编码得到Sec-WebSocket-Accept响应头返回客户端握手即完成。Go 实现标准库本身未直接支持 WebSocket但官方维护的golang.org/x/net/websocket子包提供了支持。书中示例服务端通过websocket.Handler(Echo)挂载到net/http用websocket.Message.Receive/Send完成消息回显客户端则是绑定onopen、onmessage、onerror、onclose四个事件的 HTML JavaScript 页面。完整示例代码与握手细节请阅读 ja/08.2.md。路径三RESTful 服务8.3 节RESTRepresentational State Transfer概念由 HTTP 规范主要作者之一 Roy Thomas Fielding 于 2000 年在其博士论文中首次提出满足其约束条件与原则的应用或设计即称为 RESTful。它结构清晰、符合标准、易于理解与扩展因而被大量网站采用。Go 的实现方式Go 没有对 REST 的直接内建支持但 RESTful Web 应用本质上基于 HTTP 协议因此可以借助net/http包自行实现。书中推荐使用第三方路由库github.com/julienschmidt/httprouter通过router.GET、router.POST、router.DELETE、router.PUT将不同 HTTP 方法映射到不同处理函数实现以用户为资源的增删改查接口。工程折衷由于 HTML 标准仅通过链接与表单支持 GET / POST且部分防火墙会拦截 PUT / DELETE 请求实际项目中常用 POST 请求内隐藏字段_method来模拟 PUT / DELETE服务器端负责转换还原。REST 的分层实现与可运行代码请阅读 ja/08.3.md。路径四RPC8.4 节RPCRemote Procedure Call Protocol将函数调用模型网络化客户端像调用本地函数一样把参数通过网络传给服务器服务器解包执行后把结果返回客户端。它假定底层存在某种传输协议如 TCP 或 UDP让通信程序间能轻松交换数据而无需理解低层网络技术细节。在 OSI 模型中RPC 跨越了数据链路层与应用程序层极大方便了分布式多程序应用的开发。Go RPC 的注册约束只有同时满足以下条件的函数才会被远程访问函数必须被导出首字母大写必须有两个导出类型的参数第一个参数是接收参数第二个参数是指向客户端返回值的指针函数返回值必须是error。标准形式为func (t *T) MethodName(argType T1, replyType *T2) error且 T、T1、T2 必须能被encoding/gob编解码。三种传输形态Go 标准包同时支持 HTTP RPCrpc.HandleHTTPrpc.DialHTTP、TCP RPCrpc.ServeConnrpc.Dial与 JSON RPCjsonrpc.ServeConnjsonrpc.Dial基于 TCP以 JSON 替代 gob 编码。书中以Arith类型Multiply、Divide两个方法演示了三种形态各自完整的服务端与客户端代码。完整对比与运行示例请阅读 ja/08.4.md。章节学习路线图本章四个小节构成了一个循序渐进的 Web 服务学习路径原文档以目录导航图概括了这一路线起点Socket 编程ja/08.1.md掌握网络通信的地基进阶WebSocketja/08.2.md掌握浏览器全双工实时通信应用RESTful API 设计ja/08.3.md掌握资源化接口的工程范式分布式RPCja/08.4.md掌握远程函数调用的三种形态。本章小结与延伸阅读如 ja/08.5.md 的总结所述本章覆盖了当前流行的几类主要网络应用开发方式Socket 编程——网络编程的地基在网络快速向云化演进的今天是开发者必须掌握的底层知识WebSocket——HTML5 的重要特性让服务器能够主动向客户端推送信息简化了传统的 Ajax 轮询模式REST——特别适合网络应用 API 开发的编程模式RPC——网络化函数调用模型支撑分布式应用开发。在这四类开发方式上Go 均提供了良好的支持net包及其子包net/http、net/rpc、net/rpc/jsonrpc以及官方维护的golang.org/x/net/websocket包含了网络编程所需的全部工具。若要深入底层实现细节建议直接阅读net包及其子包的源码。需要说明的是原文档指出当前 Go 尚不支持 SOAP RPC但已有第三方开源实现可作替代。全书的完整章节索引见 ja/preface.md本章内容衔接自 第七章总结后续将进入 第 9 章安全与加密。赞分享文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载相关推荐Go Web 服务开发指南从 Socket 到 WebSocket、REST 与 RPC 的完整实践Go Web 服务开发指南从 Socket 到 WebSocket、REST 与 RPC 的完整实践 本篇以《Go Web 编程》第 8 章「Servicio文档教程Go Web 服务开发指南Socket、WebSocket、REST 与 RPC 的 Go 实现build-web-application-with-golang 第 8 章Go Web 服务开发指南Socket、WebSocket、REST 与 RPC 的 Go 实现build web application with gol文档教程Go Web 服务编程全景Socket、WebSocket、REST 与 RPC 四大网络模型实战导览build-web-application-with-golang 第 8 章Go Web 服务编程全景Socket、WebSocket、REST 与 RPC 四大网络模型实战导览build web application with文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考