一种Web服务的go语言实现

0、引言

go语言已成为当今web后台开发的首选语言,关键在于其简洁性和高效并发特性。go中提供了丰富通用的http开发接口,但一般需要对其进一步封装才能更好的用于实际项目中。因此,本文基于开源库(github.com/ti/ctxrouter)来实现一种简约的web开发框架。

1、主程序,web服务的启动

import (
    "net/http"
    "services"
    "errors"
)
func Start() {
    server := services.NewServer()
    if err:= http.ListenAndServe(127.0.0.1:9677, server.HTTPHandler()); err != nil {
        panic(err)
    }
}

  其中,调用Start函数,即可启动http服务,开始监听9677端口的http请求,同时server.HTTPHandler()返回相应的http的url的路由信息。

2、Server程序,构建相应的http路由

import (
    "github.com/ti/ctxrouter"
    "net/http"
)

type Server struct {
}
func NewServer() *Server {
    server = &Server{}
    return server
}

// 构建http路由及其相应的处理器
func (this *Server) HTTPHandler() http.Handler {
    r := ctxrouter.New()
    r.Get("/prefix/model/item", (*ItemMsgContext).getItems)
    r.Get("/prefix/model/item/:id", (*ItemMsgContext).getItem)
}

3、具体处理类及接口

import (
    "github.com/ti/ctxrouter"
    "net/http"
    "encoding/json"
    "errors"
    "io/ioutil"
    "strings"
)

// 查询数据的结构体
type ItemContent struct {
    ID      string
    MsgType string
    Msg     string
}

// 继承ctxrouter.Context类型,并具有相关的数据或结构体类型
type ItemMsgContext struct {
    ctxrouter.Context
    UserId string
    Data *ItemContent
}
// 初始化,从http请求中获取一些信息
func (ctx *ItemMsgContext) Init(w http.ResponseWriter, r *http.Request) {
    ctx.Context.Init(w, r)
    ctx.UserId = r.Header.Get("X-User-Id")
}

// 对http请求的body进行解析
func (ctx *RuleMsgContext) DecodeRequest() (interface{}, error) {
    if ctx.Request.Body == nil {
        return nil
    }
    b, err := ioutil.ReadAll(ctx.Request.Body)

    if len(b) > 0 {
        if err != nil {
        }
        ctx.Data = new(ItemContent)
        if ctx.Data != nil && strings.Contains(ctx.Request.Header.Get("Content-Type"), "json") {

            if err := json.Unmarshal(b, ctx.Data); err != nil {
                return errors.New("error - " + err.Error())
            }
            itemmsg, err := json.Marshal(ctx.Data)
            if err != nil {
                return nil, err
            } else {
                return itemmsg, nil
            }
        }

    }
    return nil, nil
}

// 利用url中的查询条件来得到相应的参数,再据此查询数据库来得到并返回相应的数据
func (ctx *ItemMsgContext) getItems() (interface{}, error) {
    var msgType string
    query := ctx.Request.URL.Query()
    msgType = query.Get("msg_type")
    // 查询得到所有指定消息类型的item项:items
    return items, nil
}

// 利用url中的可变参数id来从数据库查看数据并返回
func (ctx *ItemMsgContext) getItem(id string) (interface{}, error) {
    // 从url中得到id值,再利用id值从数据库中找到指定的item
    return item, nil
}

  说明:ctxrouter开源库中提供了多种不同形式的请求,可根据用户需求来选择。

5、后记

通过以上三步,就可以完整搭建一个http服务,而且具有很好的扩展性和维护性。此外,经实际工程项目中验证,此开源库具有较高的稳定性和响应时效,没有任何异常,推荐使用此库来实现http服务。

原文地址:https://www.cnblogs.com/share-ideas/p/10719048.html

时间: 2024-11-16 08:17:58

一种Web服务的go语言实现的相关文章

常见的三种Web服务架构

常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing Architectures 我们已经给出了“不同Web服务会有不同做法”的两个主要问题,现在要据此对不同风格的Web服务进行分类了.根据我的研究,常见的Web服务架构主要有三种:REST式架构.RPC式架构和REST-RPC混合架构.下面依次对它们进行介绍. REST式.面向资源的架构 RESTf

SOAP Web 服务介绍

已经跨入 2015 年,当今最为常见的两种 Web 服务类型分别是: REST 和 SOAP .不过,从趋势来看,越来越多人已经开始使用 REST 风格的 Web 服务.而 SOAP 大多也开始或已经转型 REST,应该说 REST 会慢慢成为主流.这篇文章不会对 REST 介绍太多,主要的重点还是介绍一下 SOAP 风格的 Web 服务. Web Service 三要素 实际上,现在说 "Web Service 三要素"应该是不算很准确了,不过这个概念一直这样沿用,而且本文我们为了更

四 主要的几种 Web 服务器

一 Microsoft IIS 1. 仅支持 Windows 操作系统,用于 .Net 平台网站的部署和运行. 2. IIS 是一种 Web 服务组件,包括括 Web 服务器.FTP 服务器.NNTP 服务器和 SMTP 服务器等. 3. 图形化界面. 二 Tomcat 1. Tomcat 是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选. 2. Apache 组织下的开源应用服务器. 3. 被使用最广泛的开发和部署 J2ee 开源应

三种主流的Web服务实现

三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Representational State Transfer),采用Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 将所有 Web 系统的服务抽象为资源,REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征.Http协议所抽象

三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Representational State Transfer),采用Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 将所有 Web 系统的服务抽象为资源,REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征.Http

微软C#6.0语言OOP面向对象编程》《微软ASP.NET\MVC56网站开发》《微软Web服务\WCF\Web API3.0课程视频》

最新<微软C#6.0语言OOP面向对象编程><微软ASP.NET\MVC56网站开发><微软Web服务\WCF\Web API3.0课程视频>下载 下载链接:http://pan.baidu.com/s/1bnjJQnd 密码:36ji 微软与开源实战训练营QQ群:  203822816微软MSDN俱乐部QQ群:  29754721,

RESTful Web 服务四种操作POST/DELETE/PUT/GET

目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现.例如,Amazon.com提供接近REST风格的Web服务进行图书查找:雅虎提供的Web服务也是REST风格的. 应该是,做WEB服务,都必须掌握REST!! Rest模式有四种操作: POST /url 创建 DELETE /url/xxx 删除 PUT /url/xxx 更新或创建 GET /url/xxx 查看 GET

12个强大的Web服务测试工具

在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种类型的web服务——基于互联网协议,REST和SOAP推动数据和信息的通讯. 由于这些web服务暴露于网络并且分布于不同的网络,所以它们很容易受到风险和安全威胁,从而影响基于它们的进程.因此,web服务或API测试非常有必要,可以确保它们执行正确并正确地响应查询. 市场上有不少商业和开源的测试工具可

Web服务(Web Service)相关概念

1.概述 Web服务技术(Web Service )是一种面向服务的架构技术,通过标准的Web协议提供服务,保证不同平台的应用服务能够互相操作. 因为Web服务公布的数据基于XML格式和 SOAP协议.因此保证了不同语言开发的平台能够相互调用通信. 2.Web服务协议族 Web服务3个最重要的任务是通信协议主要基于SOAP.服务的描写叙述通过WSDL.通过UDDI来发现和获得服务的元数据. SOAP:简单对象传输协议.一个基于XML的可扩展信封格式,需同一时候绑定一个传输协议.这个协议通过HTT