
该服务一共有两个接口,一个是生成短地址,另一个是短地址进行跳转。
能够经过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言语的特性,咱们能够写出十分多有意思的东西或渠道。