设置HTTP服务路由

server.path of the application. 应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。 如下设置后,路由定义 router.GET(“/info”…) , 访问URL为: http://localhost:8080/app/info , 而不是http://localhost:8080/info

  1. yoyogo:
  2. application:
  3. name: yoyogo_demo_dev
  4. metadata: "develop"
  5. server:
  6. type: "fasthttp"
  7. address: ":8080"
  8. path: "app"
  9. max_request_size: 2096157
  10. mvc:
  11. template: "/v1/{controller}/{action}"
  1. ...
  2. ...
  3. app.UseEndpoints(registerEndpointRouterConfig)
  4. ...
  5. //region endpoint 路由绑定函数
  6. func registerEndpoints(rb router.IRouterBuilder) {
  7. Endpoints.UseHealth(rb)
  8. Endpoints.UseViz(rb)
  9. Endpoints.UsePrometheus(rb)
  10. Endpoints.UsePprof(rb)
  11. Endpoints.UseJwt(rb)
  12. rb.GET("/error", func(ctx *context.HttpContext) {
  13. panic("http get error")
  14. })
  15. //POST 请求: /info/:id ?q1=abc&username=123
  16. rb.POST("/info/:id", func(ctx *context.HttpContext) {
  17. qs_q1 := ctx.Query("q1")
  18. pd_name := ctx.Param("username")
  19. userInfo := &UserInfo{}
  20. _ = ctx.Bind(userInfo) // 手动绑定请求对象
  21. strResult := fmt.Sprintf("Name:%s , Q1:%s , bind: %s", pd_name, qs_q1, userInfo)
  22. ctx.JSON(200, context.H{"info": "hello world", "result": strResult})
  23. })
  24. // 路由组功能实现绑定 GET 请求: /v1/api/info
  25. rb.Group("/v1/api", func(router *router.RouterGroup) {
  26. router.GET("/info", func(ctx *context.HttpContext) {
  27. ctx.JSON(200, context.H{"info": "ok"})
  28. })
  29. })
  30. // GET 请求: HttpContext.RequiredServices获取IOC对象
  31. rb.GET("/ioc", func(ctx *context.HttpContext) {
  32. var userAction models.IUserAction
  33. _ = ctx.RequiredServices.GetService(&userAction)
  34. ctx.JSON(200, context.H{"info": "ok " + userAction.Login("zhang")})
  35. })
  36. }

设置MVC路由模板

mvc.template 其中 {controller} 和 {action} 为固定参数,表示控制器和执行方法;按URL方式填写。

  1. type UserController struct {
  2. mvc.ApiController
  3. userAction models.IUserAction
  4. }
  5. func NewUserController(userAction models.IUserAction) *UserController {
  6. return &UserController{userAction: userAction}
  7. }
  8. func (controller UserController) GetInfo() mvc.ApiResult {
  9. return controller.OK(controller.userAction.Login("zhang"))
  10. }
  11. package main
  12. import (
  13. yoyogo "github.com/yoyofx/yoyogo/web"
  14. ......
  15. )
  16. func main() {
  17. configuration := abstractions.NewConfigurationBuilder().
  18. AddEnvironment().
  19. AddYamlFile("config").Build()
  20. yoyogo.NewWebHostBuilder().
  21. UseConfiguration(configuration).
  22. Configure(func(app *yoyogo.WebApplicationBuilder) {
  23. app.UseMvc(func(builder *mvc.ControllerBuilder) {
  24. builder.AddController(contollers.NewUserController)
  25. })
  26. }).Build().Run()
  27. }