该服务一共有两个接口,一个是生成短地址,另一个是短地址进行跳转。

能够经过Redis进行数据存储也能经过MongoDB作为存储介质。

存储的数据结构,首要三个字段

// pkg/service/model.go
type Redirect struct {
 Code string `json: code `
 URL string `json: url `
 CreatedAt time.Time `json: created_at `
}

repository供给了两个办法,一个是Find和Store.

// pkg/service/repository.go
type Repository interface {
 Find 
 Store error
}

Repository是一个Interface 类型的结构体,没有详细完结。这儿依据运用的存储数据库的不同需求完结不同的存储办法。

pkg/repository/mongo/repository.go
pkg/repository/redis/repository.go

在发动进口 cmd/service/service.go 文件里能够看到发动是怎么挑选的:

// cmd/service/service.go
var repo service.Repository
switch *dbDrive {
case mongo :
 repo, err = mongodb.NewMongoRepository
 if err != nil {
 _ = level.Error.Log)
 return
case redis :
 db, _ := strconv.Atoi
 repo, err = redis.NewRedisRepository, *redisHosts, *redisPassword, shorter , db)
 if err != nil {
 _ = level.Error.Log)
 return
}

service供给了两个办法 Get 和 Post。

// pkg/service/service.go
type Service interface {
 Get 
 Post 
}

生成地址需求经过POST的办法传入JSON结构, 接纳参阅文件:

// pkg/endpoint/endpoint.go
type PostRequest struct {
 URL string `json: url validate: required,url,lt=255 `
type dataResponse struct {
 Url string `json: url `
 Code string `json: code `
 CreatedAt time.Time `json: created_at `
 ShortUri string `json: short_uri `
type PostResponse struct {
 Err error `json: err `
 Data dataResponse `json: data `
}

该接口只接纳一个参数 url ,回来四个参数。

经过uri的code进行查询例如:

r.Handle).Methods

解析 Request:

func decodeGetRequest  {
 vars := mux.Vars
 code, ok := vars[ code ]
 if !ok {
 return nil, ErrCodeNotFound
 req := endpoint.GetRequest{
 Code: code,
 return req, nil
}

跳转:

func encodeGetResponse  {
 if f, ok := response.; ok f.Failed != nil {
 ErrorRedirect, w)
 return nil
 resp := response.
 redirect := resp.Data.
 http.Redirect
 return
// 过错跳回主页
func ErrorRedirect {
 http.Redirect, http.StatusFound)
}

docker-compose发动比较简略,直接进入目录 install/docker-compose/

然后履行:

$ docker-compose up

因为此项目依靠数据库: Redis、MongoDB,所以在创立运用之前咱们得先布置Redis或MongoDB的耐久化运用。在项目里我给出了两数据库布置的Demo,咱们能够测验在自己的环境中发动。

开普勒云渠道倾向于布置无状况的运用也便是Deployment类型,像这种需求耐久化的运用最好是布置成有状况的运用如: StatefulSet类型,相对来说比较好组成分布式集群或主从节构。

单点Redis服务: install/kubernetes/redis/ 单点MongoDB服务: install/kubernetes/mongo/

咱们创立一个名叫 shorter 的运用:

icowan/shorter
v0.1.8

管理员收到告诉后进入根底概况页进行审阅:

首要检查提交的根底信息是否正确,主动生成的YAML文件是否正确,主动生成的Jenkins模版是否正确及用户项目里的Dockerfile文件是否有误,若没有问题点击**“开端布置”**按钮直接进行运用的构建及发布。

运用布置成功后,体系会向像的邮件、微信发送告诉,奉告运用发布的状况。”- “音讯订阅设置” 在音讯订阅里勾选需求告诉的类型及办法)概况请看文档:

若收到成功发布的信息,那运用就算是发动成功了。

后续若要晋级运用,运用创立者或组成员能够直接在运用概况页挑选**“Build”**按钮而且挑选相运用版别就好了。

回滚运用也相同便利:

只需求点击**“回滚”**按钮,在弹出的窗口挑选所需求回滚的版别,点击并承认,渠道会将该版别的Docker Image进行发动。

完结之后,为了让外部能够拜访到该署理,需求生成一个对外可拜访的地址。

在运用概况的最下方有一个“外部地址”的卡片,若是第一次创立运用,在卡片的header的右边有一个有**“增加”**按钮点击它,并承认就能够生成一个外部地址了。

上面便是生成的地址,咱们能够经过这个地址拜访到shorter运用。

我这布置了一个生经过短域名解析到该运用上的比如,点击下面地址进行短链生成页面。

把需求生成短链接的地址贴到输入框,并点击**“生成短链”**按钮即可生成。

点击**“仿制”** 按钮即可将短地址仿制并运用。

golang言语是一个十分高效且简略易学的编程言语,根据golang言语的特性,咱们能够写出十分多有意思的东西或渠道。