diff --git a/vblog/README.md b/vblog/README.md index a2a101c..0d7b90e 100644 --- a/vblog/README.md +++ b/vblog/README.md @@ -244,13 +244,72 @@ func (h *TokenApiHandler) RevolkToken(ctx *gin.Context) { } ``` -### 组装程序 +### 组装程序(v1) 怎么做开发显得专业 +```go +package main + +import ( + "log" + + "github.com/gin-gonic/gin" + "github.com/infraboard/mcube/v2/ioc/config/http" + blogApi "gitlab.com/go-course-project/go17/vblog/apps/blog/api" + tokenApi "gitlab.com/go-course-project/go17/vblog/apps/token/api" + "gitlab.com/go-course-project/go17/vblog/config" +) + +func main() { + config.LoadConfig() + + // gin Engine, 它包装了http server + server := gin.Default() + + // 注册业务模块的路有 + tokenApi.NewTokenApiHandler().Registry(server) + blogApi.NewBlogApiHandler().Registry(server) + + // 服务器启动 + if err := server.Run(http.Get().Addr()); err != nil { + log.Println(err) + } +} +``` + +功能分层架构(MVC): Book Api +业务分区架构(DDD): Vblog + +### 测试验证 + +```sh +curl --location 'http://127.0.0.1:8080/vblog/api/v1/blogs' \ +--header 'Content-Type: application/json' \ +--data '{ + "title": "POSTMAN测试01", + "author": "will", + "content": "post man 测试", + "summary": "Go全栈项目", + "category": "软件开发" +}' +``` + +```sh +curl --location 'http://127.0.0.1:8080/vblog/api/v1/tokens' \ +--header 'Content-Type: application/json' \ +--data '{ + "username": "admin", + "password": "123456" +}' +``` ### 中间件鉴权 +![](./docs/middleware.png) + +开发一个认证中间件: 用于根据用户携带的Token信息,判断用户身份,并把用户身份信息方到上下文中,传递给后面HandleFunc中使用 + ### ioc优化 diff --git a/vblog/apps/blog/api/api.go b/vblog/apps/blog/api/api.go index 908c2f3..3350ccf 100644 --- a/vblog/apps/blog/api/api.go +++ b/vblog/apps/blog/api/api.go @@ -20,7 +20,7 @@ type BlogApiHandler struct { // 提供注册功能, 提供一个Group // book := server.Group("/api/tokens") func (h *BlogApiHandler) Registry(r *gin.Engine) { - router := r.Group("/api/blogs") + router := r.Group("/vblog/api/v1/blogs") router.POST("", h.CreateBlog) router.GET("", h.QueryBlog) } diff --git a/vblog/apps/token/api/api.go b/vblog/apps/token/api/api.go index 3fde6fc..670a340 100644 --- a/vblog/apps/token/api/api.go +++ b/vblog/apps/token/api/api.go @@ -21,9 +21,9 @@ type TokenApiHandler struct { // 提供注册功能, 提供一个Group // book := server.Group("/api/tokens") func (h *TokenApiHandler) Registry(r *gin.Engine) { - router := r.Group("/api/tokens") - router.POST("/issue", h.IssueToken) - router.POST("/revolk", h.RevolkToken) + router := r.Group("/vblog/api/v1/tokens") + router.POST("", h.IssueToken) + router.DELETE("", h.RevolkToken) } func (h *TokenApiHandler) IssueToken(ctx *gin.Context) { diff --git a/vblog/docs/middleware.drawio b/vblog/docs/middleware.drawio new file mode 100644 index 0000000..e87bf44 --- /dev/null +++ b/vblog/docs/middleware.drawio @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vblog/docs/middleware.png b/vblog/docs/middleware.png new file mode 100644 index 0000000..831c9c9 Binary files /dev/null and b/vblog/docs/middleware.png differ