1、Go Web编程:第1章 Go与Web应用

1.1 使用Go语言构建Web应用

        大规模可扩展的Web应用通常需要具备以下特质:可扩展;模块化;可维护;高性能。在开发大规模Web应用方面,Go语言提供了一种不同于现有语言和平台但又切实可行的方案能同时满足这四种特质。

        1.1.1可扩展

        go语言有两种方式可以对性能进行扩展:一种是垂直扩展 (vertical scaling),即提升单台设备的CPU数量或者性能;另一种则是水平扩展 (horizontal scaling),即通过增加计算机的数量来提升性能。前者由并发编程而实现,后者通过静态编译方便部署而实现。

        1.1.2模块化

        通过接口实现动态类型匹配。

      1.1.3可维护

         Go语言的设计鼓励良好的软件工程实践,它拥有简洁且极具可读性的语法以及灵活且清晰的包管理系统。Go还内置了对测试的支持:gotest工具会自动寻找与源代码处于同一个(package)之内的测试代码,并运行其中的功能测试和性能测试。Go语言也提供了Web应用测试工具,这些工具可以模拟出一个Web服务器,并对该服务器生成的响应(response)进行记录。

     1.1.4高性能

        Go程序会被编译为本地码(native code),这一般意味着Go程序可以运行得比解释型语言的程序要快,同时Go语言的goroutine对并发编程提供了非常好的支持,这使得Go应用可以同时处理多个请求。

1.2 Web应用的工作原理

        Web应用定义:这个程序必须向发送命令请求的客户端返回HTML,而客户端则会向用户展示渲染后的HTML;这个程序在向客户端传送数据时必需使用HTTP协议。

        在这个定义的基础上,如果一个程序不是向用户渲染并展示HTML,而是向其他程序
返回某种非HTML格式的数据,那么这个程序就是一个为其他程序提供服务的Web服务 。

1.3 HTTP简介

        推荐阅读《图解HTTP》

1.4 HTTP方法

        GET ——命令服务器返回指定的资源。
        HEAD ——与 GET 方法的作用类似,唯一的不同在于这个方法不要求服务器返回报文的主体。这个方法通常用于在不获取报文主体的情况下,取得响应的首部。
        POST ——命令服务器将报文主体中的数据传递给URI指定的资源,至于服务器具体会对这些数据执行什么动作则取决于服务器本身。
        PUT ——命令服务器将报文主体中的数据设置为URI指定的资源。如果URI指定的位置上已经有数据存在,那么使用报文主体中的数据去代替已有的数据。如果资源尚未存在,那么在URI指定的位置上新创建一个资源。
        DELETE ——命令服务器删除URI指定的资源。
        TRACE ——命令服务器返回请求本身。通过这个方法,客户端可以知道介于它和服务器之间的其他服务器是如何处理请求的。
        OPTIONS ——命令服务器返回它支持的HTTP方法列表。
        CONNECT ——命令服务器与客户端建立一个网络连接。这个方法通常用于设置SSL隧道以开启HTTPS功能。
        PATCH ——命令服务器使用报文主体中的数据对URI指定的资源进行修改。

        如果一个HTTP方法只要求服务器提供信息而不会对服务器的状态做任何修改,那么这个方法就是安全的 (safe)。GET 、HEAD 、OPTIONS 和TRACE 都不会对服务器的状态进行修改,所以它们都是安全的方法。
        如果一个HTTP方法在使用相同的数据进行第二次调用的时候,不会对服务器的状态造成任何改变,那么这个方法就是幂等的 (idempotent)。安全天生幂等,PUT 和DELETE 幂等。
        POST 方法既不安全也非幂等。

1.5 URI

  1.         URI(统一资源标识符):URI 是一个通用概念,用于唯一标识资源。它可以是 URL 或 URN,也可以是两者的组合。URI 的目的是提供一种统一的方式来标识任何类型的资源,无论是网络上的还是本地的,以便能够准确定位和访问这些资源。
             URL(统一资源定位符):URL 是 URI 的一种形式,它不仅标识资源,还指示了如何访问该资源。URL 包括了资源的位置和访问方式。URL 通常由以下几部分组成:协议(如 HTTP、HTTPS)、主机地址(如 www.example.com)、路径(指向资源在服务器上的位置)、可能的查询参数和片段标识符。
            URN(统一资源名称):URN 也是 URI 的一种形式,用于唯一标识资源,但不提供资源的位置或访问方式。URN 主要用于命名资源,而不指示如何获取它。URN 通常用于在不同的上下文中引用资源,而不依赖于资源的位置或网络访问。
            在许多情况下,URI 和 URL 确实可以等同对待,因为 URL 是 URI 的一种特定形式。事实上,URL 是最常见的 URI 类型之一。因此,如果我们讨论的是网络上的资源标识符,并且我们关注的是如何访问这些资源,那么 URI 和 URL 可以视为相同的概念。

1.6 Web应用的各个组成部分

        (1)通过HTTP协议,以HTTP请求报文的形式获取客户端输入;
        (2)对HTTP请求报文进行处理,并执行必要的操作;
        (3)生成HTML,并以HTTP响应报文的形式将其返回给客户端。
        为了完成这些任务,Web应用被分成了处理器 (handler)和模板引擎 (templateengine)这两个部分。

        1.6.1 处理器

        用MVC来讲(Model-View-Controller模型-视图-控制器),处理器既是控制器(controller),也是模型(model)。控制器应该是“苗条的”,应该只包含路由(routing)代码以及HTTP报文的解包和打包逻辑;而模型则应该是“丰满的”,应该包含应用的逻辑以及数据。

        1.6.2 模板引擎

        通过HTTP响应报文回传给客户端的HTML是由模板 (template)转换而成的,模板里面可能会包含HTML,但也可能不会,而模板引擎 (template engine)则通过模板和数据来生成最终的HTML。正如之前所说,模板引擎是经由早期的SSI技术演变而来的。(私肤浅理解为前端)
       

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值