short_link

module
v0.0.0-...-1eef698 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2024 License: MIT

README

介绍

     Go Gin实现的短链接服务。
     本项目用于短链接服务的学习和原理阐述,请勿直接将该项目运用到生产环境中。

博客

     使用Go语言开发一个短链接服务

软件架构
  • 服务依赖组件包括缓存和数据库
  • 项目中缓存不依赖特定组件,实现app/component/cache.go的CacheItf接口即可。默认已实现Redis作为缓存
  • 项目中数据库不依赖特定组件,实现app/component/database.go的DatabaseItf接口即可。默认已实现MongoDB作为数据库
实现接口

     见接口文档,【docs/api_doc.json

  • 跳转:GET /:code
  • 添加短链接: POST /api/v1/links
  • 获取链接详情:GET /api/v1/links
接口用户认证

     项目未实现用户的登录注册等逻辑,因为认为短链接服务应该为一个子系统,用户服务多数情况下设计为一个单独的服务。其它子服务,仅实现用户认证。
     项目实现了一个基于请求头JsonWebToken的认证中间件,添加和获取短链接两个接口需要认证。
     请求需要认证的接口需要在求头加上key "Authorization", value "Bearer {jwt}"
     下面为一段生成用来测试jwt代码:

package main

import (
	"fmt"
	"time"

	"github.com/golang-jwt/jwt/v5"

	"github.com/1911860538/short_link/config"
)

func main() {
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
		"id":       "1f70a466-1449-4676-b2d7-2037341c718e",
		"name":     "Tom",
		"username": "Tom01",
		"exp":      time.Date(2035, 10, 10, 12, 0, 0, 0, time.UTC).Unix(),
	})

	tokenStr, err := token.SignedString([]byte(config.Conf.Jwt.SecretKey))
	if err != nil {
		panic(err)
		return
	}
	fmt.Println(tokenStr)
}

     下面为一个可用来测试的Authorization:

 Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjIwNzU2MzA0MDAsImlkIjoiMWY3MGE0NjYtMTQ0OS00Njc2LWIyZDctMjAzNzM0MWM3MThlIiwibmFtZSI6IlRvbSIsInVzZXJuYW1lIjoiVG9tMDEifQ.wGEVC-9okRKjCWoxJMWF90LM0gKHSdJHVvvuqQMTwbk 
启动目录

     cmd/server/main.go

Directories

Path Synopsis
app
cmd
tests

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL