[bigdata-088] go+ubuntu 一个最简单的api返回json格式数据的web
发布时间:2020-12-14 03:09:37 所属栏目:大数据 来源:网络整理
导读:1. 参考代码 https://github.com/beego/samples/tree/master/shorturl 2. 目录结构 ├── conf │ ? └── app.conf ├── controllers │ ? └── object.go ├── main.go └── models ? ? └── model.go 3. main.go内容如下: package mainimpor
|
1. 参考代码 https://github.com/beego/samples/tree/master/shorturl 2. 目录结构 ├── conf 3. main.go内容如下: package main
import (
"beegoapidemo1/controllers"
"github.com/astaxie/beego"
)
func main() {
beego.Router("/v1/shorten",&controllers.ShortController{})
beego.Run()
}
4. models/model.go内容如下: package models
import (
"crypto/md5"
"fmt"
"io"
)
var (
globalnum int
)
func init() {
globalnum = 100000000
}
func GetMD5(lurl string) string {
h := md5.New()
salt1 := "salt4shorturl"
io.WriteString(h,lurl+salt1)
urlmd5 := fmt.Sprintf("%x",h.Sum(nil))
return urlmd5
}
func Generate() (tiny string) {
globalnum++
num := globalnum
fmt.Println(num)
alpha := merge(getRange(48,57),getRange(65,90))
alpha = merge(alpha,getRange(97,122))
if num < 62 {
tiny = string(alpha[num])
return tiny
} else {
var runes []rune
runes = append(runes,alpha[num%62])
num = num / 62
for num >= 1 {
if num < 62 {
runes = append(runes,alpha[num-1])
} else {
runes = append(runes,alpha[num%62])
}
num = num / 62
}
for i,j := 0,len(runes)-1; i < j; i,j = i+1,j-1 {
runes[i],runes[j] = runes[j],runes[i]
}
tiny = string(runes)
return tiny
}
return tiny
}
func getRange(start,end rune) (ran []rune) {
for i := start; i <= end; i++ {
ran = append(ran,i)
}
return ran
}
func merge(a,b []rune) []rune {
c := make([]rune,len(a)+len(b))
copy(c,a)
copy(c[len(a):],b)
return c
}
5. controllers/object.go内容如下: package controllers
import (
"beegoapidemo1/models"
"github.com/astaxie/beego"
"github.com/astaxie/beego/cache"
)
var (
urlcache cache.Cache
)
func init() {
urlcache,_ = cache.NewCache("memory",`{"interval":0}`)
}
type ShortResult struct {
UrlShort string
UrlLong string
}
type ShortController struct {
beego.Controller
}
// Use Get rather than Post so that we can simulate easier in the browser
func (this *ShortController) Get() {
var result ShortResult
longurl := this.Input().Get("longurl")
beego.Info(longurl)
result.UrlLong = longurl
urlmd5 := models.GetMD5(longurl)
beego.Info(urlmd5)
if urlcache.IsExist(urlmd5) {
result.UrlShort = urlcache.Get(urlmd5).(string)
} else {
result.UrlShort = models.Generate()
err := urlcache.Put(urlmd5,result.UrlShort,0)
if err != nil {
beego.Info(err)
}
err = urlcache.Put(result.UrlShort,longurl,0)
if err != nil {
beego.Info(err)
}
}
this.Data["json"] = result
this.ServeJSON()
}
6. conf/app.conf内容如下 appname = shorturl httpport = 8080 runmode = dev autorender = false copyrequestbody = true 7. 编译后运行。 8. 在浏览器输入http://127.0.0.1:8080/v1/shorten/?longurl=http://google.com 返回值是json结构 {
"UrlShort": "5laZF","UrlLong": "http://google.com"
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
