Browse Source

完成网重构

yjp 10 months ago
parent
commit
42c5a3ef09

+ 67 - 51
convenient/domain_gateway/configuration/configuration.go

@@ -15,11 +15,11 @@ type Option func(options *Options)
 
 type Options struct {
 	serviceApiVersion                  string
-	globalMiddlewares                  []api.Handler
-	createMiddlewares                  []api.Handler
-	deleteMiddlewares                  []api.Handler
-	queryMiddlewares                   []api.Handler
-	queryRegisteredServicesMiddlewares []api.Handler
+	globalMiddlewares                  []gateway.Handler
+	createMiddlewares                  []gateway.Handler
+	deleteMiddlewares                  []gateway.Handler
+	queryMiddlewares                   []gateway.Handler
+	queryRegisteredServicesMiddlewares []gateway.Handler
 }
 
 func WithServiceApiVersion(serviceApiVersion string) Option {
@@ -28,31 +28,31 @@ func WithServiceApiVersion(serviceApiVersion string) Option {
 	}
 }
 
-func WithGlobalMiddlewares(middlewares ...api.Handler) Option {
+func WithGlobalMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.globalMiddlewares = middlewares
 	}
 }
 
-func WithCreateMiddlewares(middlewares ...api.Handler) Option {
+func WithCreateMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.createMiddlewares = middlewares
 	}
 }
 
-func WithDeleteMiddlewares(middlewares ...api.Handler) Option {
+func WithDeleteMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.deleteMiddlewares = middlewares
 	}
 }
 
-func WithQueryMiddlewares(middlewares ...api.Handler) Option {
+func WithQueryMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.queryMiddlewares = middlewares
 	}
 }
 
-func WithQueryRegisteredServicesMiddlewares(middlewares ...api.Handler) Option {
+func WithQueryRegisteredServicesMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.queryRegisteredServicesMiddlewares = middlewares
 	}
@@ -80,24 +80,26 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 
 	// 创建
 	builder.
-		Url(http.MethodPost, "/configuration/create").
-		Post(&gateway.PostRequest{
-			UrlFormFunc: func(c *api.Context, _ string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
-				jsonBody, err := c.GetJsonBody()
+		PostRoute("/configuration/create",
+			func(requestBuilder *gateway.RequestBuilder) {
+				jsonBody, err := requestBuilder.Context().GetJsonBody()
 				if err != nil {
-					return "", err
+					requestBuilder.ResponseError(err)
+					return
 				}
 
 				serviceShortName, ok := jsonBody.Get("serviceShortName").(string)
 				if !ok {
-					return "", errors.New("没有传递服务名缩写或服务名缩写不是string类型")
+					requestBuilder.ResponseError(errors.New("没有传递服务名缩写或服务名缩写不是string类型"))
+					return
 				}
 
 				jsonBody.Delete("serviceShortName")
 
 				serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
 				if !loaded {
-					return "", errors.New("没有注册对应的服务: " + serviceShortName)
+					requestBuilder.ResponseError(errors.New("没有注册对应的服务: " + serviceShortName))
+					return
 				}
 
 				var serviceUrl string
@@ -105,44 +107,50 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 				if strutils.IsStringEmpty(options.serviceApiVersion) {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/create")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				} else {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/create")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				}
 
-				return serviceUrl, nil
-			},
-		}).
-		Build(createMiddlewares...)
+				requestBuilder.
+					Post(&gateway.PostRequest{
+						Url: serviceUrl,
+					}).
+					Request()
+			}, createMiddlewares...)
 
 	// 删除
 	builder.
-		Url(http.MethodPost, "/configuration/delete").
-		Post(&gateway.PostRequest{
-			UrlFormFunc: func(c *api.Context, _ string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
-				jsonBody, err := c.GetJsonBody()
+		PostRoute("/configuration/delete",
+			func(requestBuilder *gateway.RequestBuilder) {
+				jsonBody, err := requestBuilder.Context().GetJsonBody()
 				if err != nil {
-					return "", err
+					requestBuilder.ResponseError(err)
+					return
 				}
 
 				serviceShortName, ok := jsonBody.Get("serviceShortName").(string)
 				if !ok {
-					return "", errors.New("没有传递服务名缩写或服务名缩写不是string类型")
+					requestBuilder.ResponseError(errors.New("没有传递服务名缩写或服务名缩写不是string类型"))
+					return
 				}
 
 				jsonBody.Delete("serviceShortName")
 
 				serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
 				if !loaded {
-					return "", errors.New("没有注册对应的服务: " + serviceShortName)
+					requestBuilder.ResponseError(errors.New("没有注册对应的服务: " + serviceShortName))
+					return
 				}
 
 				var serviceUrl string
@@ -150,41 +158,46 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 				if strutils.IsStringEmpty(options.serviceApiVersion) {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/delete")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				} else {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/delete")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				}
 
-				return serviceUrl, nil
-			},
-		}).
-		Build(deleteMiddlewares...)
+				requestBuilder.
+					Post(&gateway.PostRequest{
+						Url: serviceUrl,
+					}).
+					Request()
+			}, deleteMiddlewares...)
 
 	// 查询
 	builder.
-		Url(http.MethodGet, "/configuration/values").
-		Get(&gateway.GetRequest{
-			UrlFormFunc: func(c *api.Context, _ string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
-				queryParams := c.GetQueryParams()
+		GetRoute("/configuration/values",
+			func(requestBuilder *gateway.RequestBuilder) {
+				queryParams := requestBuilder.Context().GetQueryParams()
 
 				serviceShortName := queryParams.Get("serviceShortName")
 				if strutils.IsStringEmpty(serviceShortName) {
-					return "", errors.New("没有传递服务名缩写")
+					requestBuilder.ResponseError(errors.New("没有传递服务名缩写"))
+					return
 				}
 
 				queryParams.Delete("serviceShortName")
 
 				serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
 				if !loaded {
-					return "", errors.New("没有注册对应的服务: " + serviceShortName)
+					requestBuilder.ResponseError(errors.New("没有注册对应的服务: " + serviceShortName))
+					return
 				}
 
 				var serviceUrl string
@@ -192,35 +205,38 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 				if strutils.IsStringEmpty(options.serviceApiVersion) {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/values")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				} else {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/values")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				}
 
-				return serviceUrl, nil
-			},
-		}).
-		Build(queryMiddlewares...)
+				requestBuilder.
+					Get(&gateway.GetRequest{
+						Url: serviceUrl,
+					}).
+					Request()
+			}, queryMiddlewares...)
 
 	// 查询注册的服务
 	builder.
-		Url(http.MethodGet, "/configuration/registered/services").
-		Local(func(c *api.Context) {
+		GetRoute("/configuration/registered/services", func(requestBuilder *gateway.RequestBuilder) {
 			serviceShortNames := make([]string, 0)
 			serviceBaseUrlMap.Range(func(key any, value any) bool {
 				serviceShortNames = append(serviceShortNames, key.(string))
 				return true
 			})
 
-			c.JSON(http.StatusOK, gin.H{
+			requestBuilder.Context().JSON(http.StatusOK, gin.H{
 				"services": serviceShortNames,
 			})
 		}, queryRegisteredServicesMiddlewares...)

+ 57 - 60
convenient/domain_gateway/sql_executor/sql_executor.go

@@ -15,10 +15,10 @@ type Option func(options *Options)
 
 type Options struct {
 	serviceApiVersion                  string
-	globalMiddlewares                  []api.Handler
-	executeSqlMiddlewares              []api.Handler
-	sqlExecuteLogMiddlewares           []api.Handler
-	queryRegisteredServicesMiddlewares []api.Handler
+	globalMiddlewares                  []gateway.Handler
+	executeSqlMiddlewares              []gateway.Handler
+	sqlExecuteLogMiddlewares           []gateway.Handler
+	queryRegisteredServicesMiddlewares []gateway.Handler
 }
 
 func WithServiceApiVersion(serviceApiVersion string) Option {
@@ -27,25 +27,25 @@ func WithServiceApiVersion(serviceApiVersion string) Option {
 	}
 }
 
-func WithGlobalMiddlewares(middlewares ...api.Handler) Option {
+func WithGlobalMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.globalMiddlewares = middlewares
 	}
 }
 
-func WithExecuteSqlMiddlewares(middlewares ...api.Handler) Option {
+func WithExecuteSqlMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.executeSqlMiddlewares = middlewares
 	}
 }
 
-func WithSqlExecuteLogMiddlewares(middlewares ...api.Handler) Option {
+func WithSqlExecuteLogMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.sqlExecuteLogMiddlewares = middlewares
 	}
 }
 
-func WithQueryRegisteredServicesMiddlewares(middlewares ...api.Handler) Option {
+func WithQueryRegisteredServicesMiddlewares(middlewares ...gateway.Handler) Option {
 	return func(options *Options) {
 		options.queryRegisteredServicesMiddlewares = middlewares
 	}
@@ -71,24 +71,26 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 	builder := gw.NewBuilder(api.RouterPrefix, "")
 
 	builder.
-		Url(http.MethodPost, "/sql/execute").
-		Post(&gateway.PostRequest{
-			UrlFormFunc: func(c *api.Context, _ string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
-				jsonBody, err := c.GetJsonBody()
+		PostRouteWithUserIDCommon("/sql/execute", "executorId",
+			func(requestBuilder *gateway.RequestBuilder) {
+				jsonBody, err := requestBuilder.Context().GetJsonBody()
 				if err != nil {
-					return "", err
+					requestBuilder.ResponseError(err)
+					return
 				}
 
 				serviceShortName, ok := jsonBody.Get("serviceShortName").(string)
 				if !ok {
-					return "", errors.New("没有传递服务名缩写或服务名缩写不是string类型")
+					requestBuilder.ResponseError(errors.New("没有传递服务名缩写或服务名缩写不是string类型"))
+					return
 				}
 
 				jsonBody.Delete("serviceShortName")
 
 				serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
 				if !loaded {
-					return "", errors.New("没有注册对应的服务: " + serviceShortName)
+					requestBuilder.ResponseError(errors.New("没有注册对应的服务: " + serviceShortName))
+					return
 				}
 
 				var serviceUrl string
@@ -96,60 +98,52 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 				if strutils.IsStringEmpty(options.serviceApiVersion) {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/sql/execute")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				} else {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/sql/execute")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				}
 
-				return serviceUrl, nil
-			},
-			BodyFormFunc: func(c *api.Context, _ any, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (any, error) {
-				err := gateway.AddJsonBodyTenantIDAndUserID(c, "", "executorId")
-				if err != nil {
-					return nil, err
-				}
-
-				jsonBody, err := c.GetJsonBody()
-				if err != nil {
-					return nil, err
-				}
-
-				userInfo := c.GetUserInfo()
+				userInfo := requestBuilder.Context().GetUserInfo()
 				if userInfo == nil {
 					jsonBody.Set("executorName", "guest")
 				} else {
 					jsonBody.Set("executorName", userInfo.GetName)
 				}
 
-				return jsonBody.Map(), nil
-			},
-		}).
-		Build(executeSqlMiddlewares...)
+				requestBuilder.
+					Post(&gateway.PostRequest{
+						Url: serviceUrl,
+					}).
+					Request()
+			}, executeSqlMiddlewares...)
 
 	builder.
-		Url(http.MethodGet, "/sql/execute/log").
-		Get(&gateway.GetRequest{
-			UrlFormFunc: func(c *api.Context, _ string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
-				queryParams := c.GetQueryParams()
+		GetRouteWithUserIDCommon("/sql/execute/log", "executorId",
+			func(requestBuilder *gateway.RequestBuilder) {
+				queryParams := requestBuilder.Context().GetQueryParams()
 
 				serviceShortName := queryParams.Get("serviceShortName")
 				if strutils.IsStringEmpty(serviceShortName) {
-					return "", errors.New("没有传递服务名缩写")
+					requestBuilder.ResponseError(errors.New("没有传递服务名缩写"))
+					return
 				}
 
 				queryParams.Delete("serviceShortName")
 
 				serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
 				if !loaded {
-					return "", errors.New("没有注册对应的服务: " + serviceShortName)
+					requestBuilder.ResponseError(errors.New("没有注册对应的服务: " + serviceShortName))
+					return
 				}
 
 				var serviceUrl string
@@ -157,37 +151,40 @@ func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 				if strutils.IsStringEmpty(options.serviceApiVersion) {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/sql/execute/log")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				} else {
 					innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/sql/execute/log")
 					if err != nil {
-						return "", err
+						requestBuilder.ResponseError(err)
+						return
 					}
 
 					serviceUrl = innerServiceUrl
 				}
 
-				return serviceUrl, nil
-			},
-			QueryParamsFormFunc: gateway.FormQueryParamsWithTenantIDAndUserIDFunc("", "executorId"),
-		}).
-		Build(sqlExecuteLogMiddlewares...)
+				requestBuilder.
+					Get(&gateway.GetRequest{
+						Url: serviceUrl,
+					}).
+					Request()
+			}, sqlExecuteLogMiddlewares...)
 
 	// 查询注册的服务
 	builder.
-		Url(http.MethodGet, "/sql/execute/registered/services").
-		Local(func(c *api.Context) {
-			serviceShortNames := make([]string, 0)
-			serviceBaseUrlMap.Range(func(key any, value any) bool {
-				serviceShortNames = append(serviceShortNames, key.(string))
-				return true
-			})
-
-			c.JSON(http.StatusOK, gin.H{
-				"services": serviceShortNames,
-			})
-		}, queryRegisteredServicesMiddlewares...)
+		GetRoute("/sql/execute/registered/services",
+			func(requestBuilder *gateway.RequestBuilder) {
+				serviceShortNames := make([]string, 0)
+				serviceBaseUrlMap.Range(func(key any, value any) bool {
+					serviceShortNames = append(serviceShortNames, key.(string))
+					return true
+				})
+
+				requestBuilder.Context().JSON(http.StatusOK, gin.H{
+					"services": serviceShortNames,
+				})
+			}, queryRegisteredServicesMiddlewares...)
 }

+ 186 - 221
convenient/gwtools/entity_crud/entity_crud.go

@@ -1,7 +1,7 @@
 package entity_crud
 
 import (
-	"git.sxidc.com/go-framework/baize/framework/core/api"
+	"git.sxidc.com/go-framework/baize/framework/core/api/response"
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/http_client"
 	"git.sxidc.com/go-tools/utils/template"
@@ -76,221 +76,186 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 	if !createOptions.disable {
 		createMiddlewares := append(globalOptions.middlewares, createOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodPost, domainPath+"/create")
-
-		copyBuilder.
-			Post(&gateway.PostRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/create",
-				BodyFormFunc: func(c *api.Context, body any, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (any, error) {
-					_, err := gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId")(c, body, historyRequests, resultMap)
-					if err != nil {
-						return nil, err
-					}
-
-					if createOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := createOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					jsonBody, err := c.GetJsonBody()
-					if err != nil {
-						return nil, err
-					}
-
-					return jsonBody.Map(), nil
-				},
-				HeadersFormFunc: nil,
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if createOptions.afterBuilderCallback != nil {
-						innerBuilder, err := createOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(createMiddlewares...)
+		builder.PostRouteWithTenantIDAndUserIDCommon(domainPath+"/create", "tenantId", "createUserId",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.Post(
+					&gateway.PostRequest{
+						Url: simple.ServiceVersionedUrl + domainPath + "/create",
+					},
+					gateway.WithBeforeRequestCallback(
+						func(requestBuilder *gateway.RequestBuilder) error {
+							if createOptions.beforeBuilderCallback != nil {
+								return createOptions.beforeBuilderCallback(requestBuilder)
+							}
+
+							return nil
+						}),
+					gateway.WithRequestResponseCallback(
+						func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+							if createOptions.afterBuilderCallback != nil {
+								err := createOptions.afterBuilderCallback(requestBuilder)
+								if err != nil {
+									return err
+								}
+							}
+
+							return nil
+						})).
+					ResponseErrorCallback(func(requestBuilder *gateway.RequestBuilder, err error) {
+						response.SendIDResponse(requestBuilder.Context(), http.StatusOK, "", err)
+					}).
+					Request()
+			}, createMiddlewares...)
 	}
 
 	// 删除
 	if !deleteOptions.disable {
 		deleteMiddlewares := append(globalOptions.middlewares, deleteOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodDelete, domainPath+"/delete")
-
-		copyBuilder.
-			Delete(&gateway.DeleteRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/delete",
-				QueryParamsFormFunc: func(c *api.Context, _ map[string]string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (map[string]string, error) {
-					if deleteOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := deleteOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return c.GetQueryParams().Map(), nil
-				},
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if deleteOptions.afterBuilderCallback != nil {
-						innerBuilder, err := deleteOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(deleteMiddlewares...)
+		builder.DeleteRoute(domainPath+"/delete",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Delete(
+						&gateway.DeleteRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/delete",
+						},
+						gateway.WithBeforeRequestCallback(
+							func(requestBuilder *gateway.RequestBuilder) error {
+								if deleteOptions.beforeBuilderCallback != nil {
+									err := deleteOptions.beforeBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if deleteOptions.afterBuilderCallback != nil {
+									err := deleteOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, deleteMiddlewares...)
 	}
 
 	// 修改
 	if !updateOptions.disable {
 		updateMiddlewares := append(globalOptions.middlewares, updateOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodPut, domainPath+"/update")
-
-		copyBuilder.
-			Put(&gateway.PutRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/update",
-				BodyFormFunc: func(c *api.Context, body any, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (any, error) {
-					_, err := gateway.FormJsonBodyWithTenantIDAndUserIDFunc("", "updateUserId")(c, body, historyRequests, resultMap)
-					if err != nil {
-						return nil, err
-					}
-
-					if updateOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := updateOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					jsonBody, err := c.GetJsonBody()
-					if err != nil {
-						return nil, err
-					}
-
-					return jsonBody.Map(), nil
-				},
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if updateOptions.afterBuilderCallback != nil {
-						innerBuilder, err := updateOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(updateMiddlewares...)
+		builder.PutRouteWithUserIDCommon(domainPath+"/update", "updateUserId",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Put(
+						&gateway.PutRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/update",
+						},
+						gateway.WithBeforeRequestCallback(func(requestBuilder *gateway.RequestBuilder) error {
+							if updateOptions.beforeBuilderCallback != nil {
+								err := updateOptions.beforeBuilderCallback(requestBuilder)
+								if err != nil {
+									return err
+								}
+							}
+
+							return nil
+						}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if updateOptions.afterBuilderCallback != nil {
+									err := updateOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, updateMiddlewares...)
 	}
 
 	// 查询
 	if !queryOptions.disable {
 		queryMiddlewares := append(globalOptions.middlewares, queryOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodGet, domainPath+"/query")
-
-		copyBuilder.
-			Get(&gateway.GetRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/query",
-				QueryParamsFormFunc: func(c *api.Context, queryParams map[string]string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (map[string]string, error) {
-					_, err := gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", "")(c, queryParams, historyRequests, resultMap)
-					if err != nil {
-						return nil, err
-					}
-
-					if queryOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := queryOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return c.GetQueryParams().Map(), nil
-				},
-				PathParamsFormFunc: nil,
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if queryOptions.afterBuilderCallback != nil {
-						innerBuilder, err := queryOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(queryMiddlewares...)
+		builder.GetRouteWithTenantID(domainPath+"/query",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Get(
+						&gateway.GetRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/query",
+						},
+						gateway.WithBeforeRequestCallback(func(requestBuilder *gateway.RequestBuilder) error {
+							if queryOptions.beforeBuilderCallback != nil {
+								err := queryOptions.beforeBuilderCallback(requestBuilder)
+								if err != nil {
+									return err
+								}
+							}
+
+							return nil
+						}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if queryOptions.afterBuilderCallback != nil {
+									err := queryOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, queryMiddlewares...)
 	}
 
 	// 通过ID获取
 	if !getByIDOptions.disable {
 		getByIDMiddlewares := append(globalOptions.middlewares, getByIDOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodGet, domainPath+"/get")
-
-		copyBuilder.
-			Get(&gateway.GetRequest{
-				Url:             simple.ServiceVersionedUrl + domainPath + "/get",
-				QueryParams:     nil,
-				PathParams:      nil,
-				UrlFormFunc:     nil,
-				HeadersFormFunc: nil,
-				QueryParamsFormFunc: func(c *api.Context, _ map[string]string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (map[string]string, error) {
-					if getByIDOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := getByIDOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return c.GetQueryParams().Map(), nil
-				},
-				PathParamsFormFunc: nil,
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if getByIDOptions.afterBuilderCallback != nil {
-						innerBuilder, err := getByIDOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(getByIDMiddlewares...)
+		builder.GetRoute(domainPath+"/get",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Get(
+						&gateway.GetRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/get",
+						},
+						gateway.WithBeforeRequestCallback(
+							func(requestBuilder *gateway.RequestBuilder) error {
+								if getByIDOptions.beforeBuilderCallback != nil {
+									err := getByIDOptions.beforeBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if getByIDOptions.afterBuilderCallback != nil {
+									err := getByIDOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, getByIDMiddlewares...)
 	}
 }
 
-type BuilderCallback func(builder *gateway.Builder, c *api.Context, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (*gateway.Builder, error)
+type RequestBuilderCallback func(requestBuilder *gateway.RequestBuilder) error
 
 type GlobalOption func(options *GlobalOptions)
 type CreateOption func(options *CreateOptions)
@@ -300,7 +265,7 @@ type QueryOption func(options *QueryOptions)
 type GetByIDOption func(options *GetByIDOptions)
 
 type GlobalOptions struct {
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type CreateOptions struct {
@@ -308,13 +273,13 @@ type CreateOptions struct {
 	disable bool
 
 	// 创建请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 创建请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 创建中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type DeleteOptions struct {
@@ -322,13 +287,13 @@ type DeleteOptions struct {
 	disable bool
 
 	// 删除请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 删除请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 删除中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type UpdateOptions struct {
@@ -336,13 +301,13 @@ type UpdateOptions struct {
 	disable bool
 
 	// 更新请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 更新请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 更新中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type QueryOptions struct {
@@ -350,13 +315,13 @@ type QueryOptions struct {
 	disable bool
 
 	// 查询请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 查询请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 查询中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type GetByIDOptions struct {
@@ -364,34 +329,34 @@ type GetByIDOptions struct {
 	disable bool
 
 	// 根据ID请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 根据ID请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 根据ID查询中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
-func WithGlobalMiddlewares(middlewares ...api.Handler) GlobalOption {
+func WithGlobalMiddlewares(middlewares ...gateway.Handler) GlobalOption {
 	return func(options *GlobalOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithBeforeCreateBuilderCallback(callbacks BuilderCallback) CreateOption {
+func WithBeforeCreateBuilderCallback(callbacks RequestBuilderCallback) CreateOption {
 	return func(options *CreateOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterCreateBuilderCallback(callbacks BuilderCallback) CreateOption {
+func WithAfterCreateBuilderCallback(callbacks RequestBuilderCallback) CreateOption {
 	return func(options *CreateOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithCreateMiddlewares(middlewares []api.Handler) CreateOption {
+func WithCreateMiddlewares(middlewares []gateway.Handler) CreateOption {
 	return func(options *CreateOptions) {
 		options.middlewares = middlewares
 	}
@@ -403,19 +368,19 @@ func WithDisableDelete() DeleteOption {
 	}
 }
 
-func WithBeforeDeleteBuilderCallback(callbacks BuilderCallback) DeleteOption {
+func WithBeforeDeleteBuilderCallback(callbacks RequestBuilderCallback) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterDeleteBuilderCallback(callbacks BuilderCallback) DeleteOption {
+func WithAfterDeleteBuilderCallback(callbacks RequestBuilderCallback) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithDeleteMiddlewares(middlewares []api.Handler) DeleteOption {
+func WithDeleteMiddlewares(middlewares []gateway.Handler) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.middlewares = middlewares
 	}
@@ -427,19 +392,19 @@ func WithDisableUpdate() UpdateOption {
 	}
 }
 
-func WithBeforeUpdateBuilderCallback(callbacks BuilderCallback) UpdateOption {
+func WithBeforeUpdateBuilderCallback(callbacks RequestBuilderCallback) UpdateOption {
 	return func(options *UpdateOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterUpdateBuilderCallback(callbacks BuilderCallback) UpdateOption {
+func WithAfterUpdateBuilderCallback(callbacks RequestBuilderCallback) UpdateOption {
 	return func(options *UpdateOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithUpdateMiddlewares(middlewares []api.Handler) UpdateOption {
+func WithUpdateMiddlewares(middlewares []gateway.Handler) UpdateOption {
 	return func(options *UpdateOptions) {
 		options.middlewares = middlewares
 	}
@@ -451,19 +416,19 @@ func WithDisableQuery() QueryOption {
 	}
 }
 
-func WithBeforeQueryBuilderCallback(callbacks BuilderCallback) QueryOption {
+func WithBeforeQueryBuilderCallback(callbacks RequestBuilderCallback) QueryOption {
 	return func(options *QueryOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterQueryBuilderCallback(callbacks BuilderCallback) QueryOption {
+func WithAfterQueryBuilderCallback(callbacks RequestBuilderCallback) QueryOption {
 	return func(options *QueryOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithQueryMiddlewares(middlewares []api.Handler) QueryOption {
+func WithQueryMiddlewares(middlewares []gateway.Handler) QueryOption {
 	return func(options *QueryOptions) {
 		options.middlewares = middlewares
 	}
@@ -475,19 +440,19 @@ func WithDisableGetByID() GetByIDOption {
 	}
 }
 
-func WithBeforeGetByIDBuilderCallback(callbacks BuilderCallback) GetByIDOption {
+func WithBeforeGetByIDBuilderCallback(callbacks RequestBuilderCallback) GetByIDOption {
 	return func(options *GetByIDOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterGetByIDBuilderCallback(callbacks BuilderCallback) GetByIDOption {
+func WithAfterGetByIDBuilderCallback(callbacks RequestBuilderCallback) GetByIDOption {
 	return func(options *GetByIDOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithGetByIDMiddlewares(middlewares []api.Handler) GetByIDOption {
+func WithGetByIDMiddlewares(middlewares []gateway.Handler) GetByIDOption {
 	return func(options *GetByIDOptions) {
 		options.middlewares = middlewares
 	}

+ 71 - 69
convenient/gwtools/pass_through/pass_through.go

@@ -1,70 +1,69 @@
 package pass_through
 
 import (
-	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"net/http"
 )
 
-func Post(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
+func Post(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPost, middlewares...)
 }
 
-func Delete(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
+func Delete(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodDelete, middlewares...)
 }
 
-func Put(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
+func Put(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPut, middlewares...)
 }
 
-func Get(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
+func Get(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodGet, middlewares...)
 }
 
-func PostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
+func PostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPost, middlewares...)
 }
 
-func DeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
+func DeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodDelete, middlewares...)
 }
 
-func PutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
+func PutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPut, middlewares...)
 }
 
-func GetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
+func GetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodGet, middlewares...)
 }
 
-func PostCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
+func PostCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPost, middlewares...)
 }
 
-func DeleteCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
+func DeleteCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodDelete, middlewares...)
 }
 
-func PutCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
+func PutCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodPut, middlewares...)
 }
 
-func GetCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
+func GetCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) {
 	params.passThrough(builder, http.MethodGet, middlewares...)
 }
 
 type PassThroughRequestItem struct {
-	Request                 gateway.BuilderRequest
+	Request                 gateway.Request
 	RequestResponseCallback gateway.RequestResponseCallback
 }
 
 type SimplePassThroughParams struct {
 	RelativePath string
-	Request      gateway.BuilderRequest
+	Request      gateway.Request
 }
 
-func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
+func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.Handler) {
 	passThroughParams := &PassThroughParams{
 		HttpMethod:              httpMethod,
 		SimplePassThroughParams: params,
@@ -78,23 +77,24 @@ type PassThroughParams struct {
 	*SimplePassThroughParams
 }
 
-func (params *PassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
-	copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
-
-	switch req := params.Request.(type) {
-	case *gateway.PostRequest:
-		copyBuilder = copyBuilder.Post(req)
-	case *gateway.DeleteRequest:
-		copyBuilder = copyBuilder.Delete(req)
-	case *gateway.PutRequest:
-		copyBuilder = copyBuilder.Put(req)
-	case *gateway.GetRequest:
-		copyBuilder = copyBuilder.Get(req)
-	default:
-		panic("不支持的请求类型")
-	}
+func (params *PassThroughParams) passThrough(builder *gateway.Builder, middlewares ...gateway.Handler) {
+	builder.AddRoute(params.HttpMethod, params.RelativePath,
+		func(requestBuilder *gateway.RequestBuilder) {
+			switch req := params.Request.(type) {
+			case *gateway.PostRequest:
+				requestBuilder.Post(req)
+			case *gateway.DeleteRequest:
+				requestBuilder.Delete(req)
+			case *gateway.PutRequest:
+				requestBuilder.Put(req)
+			case *gateway.GetRequest:
+				requestBuilder.Get(req)
+			default:
+				panic("不支持的请求类型")
+			}
 
-	copyBuilder.Build(middlewares...)
+			requestBuilder.Request()
+		}, middlewares...)
 }
 
 type SimpleOnePassThroughParams struct {
@@ -102,7 +102,7 @@ type SimpleOnePassThroughParams struct {
 	RequestItem  *PassThroughRequestItem
 }
 
-func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
+func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.Handler) {
 	onePassThroughParams := &OnePassThroughParams{
 		HttpMethod:                 httpMethod,
 		SimpleOnePassThroughParams: params,
@@ -116,23 +116,24 @@ type OnePassThroughParams struct {
 	*SimpleOnePassThroughParams
 }
 
-func (params *OnePassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
-	copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
-
-	switch req := params.RequestItem.Request.(type) {
-	case *gateway.PostRequest:
-		copyBuilder = copyBuilder.Post(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
-	case *gateway.DeleteRequest:
-		copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
-	case *gateway.PutRequest:
-		copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
-	case *gateway.GetRequest:
-		copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
-	default:
-		panic("不支持的请求类型")
-	}
+func (params *OnePassThroughParams) passThrough(builder *gateway.Builder, middlewares ...gateway.Handler) {
+	builder.AddRoute(params.HttpMethod, params.RelativePath,
+		func(requestBuilder *gateway.RequestBuilder) {
+			switch req := params.RequestItem.Request.(type) {
+			case *gateway.PostRequest:
+				requestBuilder.Post(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
+			case *gateway.DeleteRequest:
+				requestBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
+			case *gateway.PutRequest:
+				requestBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
+			case *gateway.GetRequest:
+				requestBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
+			default:
+				panic("不支持的请求类型")
+			}
 
-	copyBuilder.Build(middlewares...)
+			requestBuilder.Request()
+		}, middlewares...)
 }
 
 type SimpleCommonPassThroughParams struct {
@@ -140,7 +141,7 @@ type SimpleCommonPassThroughParams struct {
 	RequestItems []PassThroughRequestItem
 }
 
-func (params *SimpleCommonPassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
+func (params *SimpleCommonPassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.Handler) {
 	passThroughParams := &CommonPassThroughParams{
 		HttpMethod:                    httpMethod,
 		SimpleCommonPassThroughParams: params,
@@ -154,23 +155,24 @@ type CommonPassThroughParams struct {
 	*SimpleCommonPassThroughParams
 }
 
-func (params *CommonPassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
-	copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
-
-	for _, requestItem := range params.RequestItems {
-		switch req := requestItem.Request.(type) {
-		case *gateway.PostRequest:
-			copyBuilder = copyBuilder.Post(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
-		case *gateway.DeleteRequest:
-			copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
-		case *gateway.PutRequest:
-			copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
-		case *gateway.GetRequest:
-			copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
-		default:
-			panic("不支持的请求类型")
-		}
-	}
-
-	copyBuilder.Build(middlewares...)
+func (params *CommonPassThroughParams) passThrough(builder *gateway.Builder, middlewares ...gateway.Handler) {
+	builder.AddRoute(params.HttpMethod, params.RelativePath,
+		func(requestBuilder *gateway.RequestBuilder) {
+			for _, requestItem := range params.RequestItems {
+				switch req := requestItem.Request.(type) {
+				case *gateway.PostRequest:
+					requestBuilder.Post(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
+				case *gateway.DeleteRequest:
+					requestBuilder.Delete(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
+				case *gateway.PutRequest:
+					requestBuilder.Put(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
+				case *gateway.GetRequest:
+					requestBuilder.Get(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
+				default:
+					panic("不支持的请求类型")
+				}
+			}
+
+			requestBuilder.Request()
+		}, middlewares...)
 }

+ 32 - 22
convenient/gwtools/relation/many2many/many2many.go

@@ -4,7 +4,6 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/template"
 	"github.com/iancoleman/strcase"
-	"net/http"
 )
 
 func BindSimple(builder *gateway.Builder, params *Simple, opts ...Option) {
@@ -42,22 +41,27 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 	if !options.disableLeft {
 		if !options.disableLeftUpdate {
 			// 左到右更新
-			builder.
-				Url(http.MethodPost, leftDomainPath+rightDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
-				}).
-				Build()
+			builder.PostRoute(leftDomainPath+rightDomainPath+"/update",
+				func(requestBuilder *gateway.RequestBuilder) {
+					requestBuilder.
+						Post(&gateway.PostRequest{
+							Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
+						}).
+						Request()
+				})
 		}
 
 		if !options.disableLeftQuery {
 			// 左到右查询
 			builder.
-				Url(http.MethodGet, leftDomainPath+rightDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(leftDomainPath+rightDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 	}
 
@@ -65,21 +69,27 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 		if !options.disableRightUpdate {
 			// 右到左更新
 			builder.
-				Url(http.MethodPost, rightDomainPath+leftDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
-				}).
-				Build()
+				PostRoute(rightDomainPath+leftDomainPath+"/update",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Post(&gateway.PostRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableRightQuery {
 			// 右到左查询
 			builder.
-				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(rightDomainPath+leftDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 	}
 }

+ 40 - 28
convenient/gwtools/relation/one2many/one2many.go

@@ -4,7 +4,6 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/template"
 	"github.com/iancoleman/strcase"
-	"net/http"
 )
 
 func BindSimple(builder *gateway.Builder, params *Simple, opts ...Option) {
@@ -43,21 +42,27 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 		if !options.disableLeftUpdate {
 			// 左到右更新
 			builder.
-				Url(http.MethodPost, leftDomainPath+rightDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
-				}).
-				Build()
+				PostRoute(leftDomainPath+rightDomainPath+"/update",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Post(&gateway.PostRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableLeftQuery {
 			// 左到右查询
 			builder.
-				Url(http.MethodGet, leftDomainPath+rightDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(leftDomainPath+rightDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 	}
 
@@ -65,32 +70,39 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 		if !options.disableRightUpdate {
 			// 右到左更新
 			builder.
-				Url(http.MethodPost, rightDomainPath+leftDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
-				}).
-				Build()
+				PostRoute(rightDomainPath+leftDomainPath+"/update",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Post(&gateway.PostRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableRightQuery {
-			// 右到左查询
 			builder.
-				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(rightDomainPath+leftDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableRightWithLeftQuery {
 			// 右到左查询,携带左方信息
 			builder.
-				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/queryWith").
-				Get(&gateway.GetRequest{
-					Url:                 simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/queryWith",
-					QueryParamsFormFunc: gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""),
-				}).
-				Build()
+				GetRouteWithTenantID(rightDomainPath+leftDomainPath+"/queryWith",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/queryWith",
+							}).
+							Request()
+					})
 		}
 	}
 }

+ 48 - 33
convenient/gwtools/relation/one2one/one2one.go

@@ -4,7 +4,6 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/template"
 	"github.com/iancoleman/strcase"
-	"net/http"
 )
 
 func BindSimple(builder *gateway.Builder, params *Simple, opts ...Option) {
@@ -43,32 +42,40 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 		if !options.disableLeftUpdate {
 			// 左到右更新
 			builder.
-				Url(http.MethodPost, leftDomainPath+rightDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
-				}).
-				Build()
+				PostRoute(leftDomainPath+rightDomainPath+"/update",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Post(&gateway.PostRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableLeftQuery {
 			// 左到右查询
 			builder.
-				Url(http.MethodGet, leftDomainPath+rightDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(leftDomainPath+rightDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableLeftWithRightQuery {
 			// 左到右查询,携带右方信息
 			builder.
-				Url(http.MethodGet, leftDomainPath+rightDomainPath+"/queryWith").
-				Get(&gateway.GetRequest{
-					Url:                 simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/queryWith",
-					QueryParamsFormFunc: gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""),
-				}).
-				Build()
+				GetRouteWithTenantID(leftDomainPath+rightDomainPath+"/queryWith",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/queryWith",
+							}).
+							Request()
+					})
 		}
 	}
 
@@ -76,32 +83,40 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 		if !options.disableRightUpdate {
 			// 右到左更新
 			builder.
-				Url(http.MethodPost, rightDomainPath+leftDomainPath+"/update").
-				Post(&gateway.PostRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
-				}).
-				Build()
+				PostRoute(rightDomainPath+leftDomainPath+"/update",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Post(&gateway.PostRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableRightQuery {
 			// 右到左查询
 			builder.
-				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/query").
-				Get(&gateway.GetRequest{
-					Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
-				}).
-				Build()
+				GetRoute(rightDomainPath+leftDomainPath+"/query",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
+							}).
+							Request()
+					})
 		}
 
 		if !options.disableRightWithLeftQuery {
 			// 右到左查询,携带左方信息
 			builder.
-				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/queryWith").
-				Get(&gateway.GetRequest{
-					Url:                 simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/queryWith",
-					QueryParamsFormFunc: gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""),
-				}).
-				Build()
+				GetRouteWithTenantID(rightDomainPath+leftDomainPath+"/queryWith",
+					func(requestBuilder *gateway.RequestBuilder) {
+						requestBuilder.
+							Get(&gateway.GetRequest{
+								Url: simple.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/queryWith",
+							}).
+							Request()
+					})
 		}
 	}
 }

+ 114 - 138
convenient/gwtools/value_object_crud/value_object_crud.go

@@ -1,12 +1,10 @@
 package value_object_crud
 
 import (
-	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/http_client"
 	"git.sxidc.com/go-tools/utils/template"
 	"github.com/iancoleman/strcase"
-	"net/http"
 )
 
 func BindSimple(builder *gateway.Builder, params *Simple, opts ...any) {
@@ -64,137 +62,115 @@ func (simple *Simple) bind(builder *gateway.Builder) {
 	if !createOptions.disable {
 		createMiddlewares := append(globalOptions.middlewares, createOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodPost, domainPath+"/create")
-
-		copyBuilder.
-			Post(&gateway.PostRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/create",
-				BodyFormFunc: func(c *api.Context, body any, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (any, error) {
-					_, err := gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId")(c, body, historyRequests, resultMap)
-					if err != nil {
-						return nil, err
-					}
-
-					if createOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := createOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					jsonBody, err := c.GetJsonBody()
-					if err != nil {
-						return nil, err
-					}
-
-					return jsonBody.Map(), nil
-				},
-				HeadersFormFunc: nil,
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if createOptions.afterBuilderCallback != nil {
-						innerBuilder, err := createOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(createMiddlewares...)
+		builder.PostRouteWithTenantIDAndUserIDCommon(domainPath+"/create", "tenantId", "createUserId",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Post(
+						&gateway.PostRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/create",
+						},
+						gateway.WithBeforeRequestCallback(
+							func(requestBuilder *gateway.RequestBuilder) error {
+								if createOptions.beforeBuilderCallback != nil {
+									err := createOptions.beforeBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if createOptions.afterBuilderCallback != nil {
+									err := createOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, createMiddlewares...)
 	}
 
 	// 删除
 	if !deleteOptions.disable {
 		deleteMiddlewares := append(globalOptions.middlewares, deleteOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodPost, domainPath+"/delete")
-
-		copyBuilder.
-			Post(&gateway.PostRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/delete",
-				BodyFormFunc: func(c *api.Context, _ any, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (any, error) {
-					if deleteOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := deleteOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					jsonBody, err := c.GetJsonBody()
-					if err != nil {
-						return nil, err
-					}
-
-					return jsonBody.Map(), nil
-				},
-				HeadersFormFunc: nil,
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if deleteOptions.afterBuilderCallback != nil {
-						innerBuilder, err := deleteOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(deleteMiddlewares...)
+		builder.PostRoute(domainPath+"/delete",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Post(
+						&gateway.PostRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/delete",
+						},
+						gateway.WithBeforeRequestCallback(
+							func(requestBuilder *gateway.RequestBuilder) error {
+								if deleteOptions.beforeBuilderCallback != nil {
+									err := deleteOptions.beforeBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if deleteOptions.afterBuilderCallback != nil {
+									err := deleteOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, deleteMiddlewares...)
 	}
 
 	// 查询
 	if !queryOptions.disable {
 		queryMiddlewares := append(globalOptions.middlewares, queryOptions.middlewares...)
 
-		copyBuilder := builder.Url(http.MethodGet, domainPath+"/query")
-
-		copyBuilder.
-			Get(&gateway.GetRequest{
-				Url: simple.ServiceVersionedUrl + domainPath + "/query",
-				QueryParamsFormFunc: func(c *api.Context, queryParams map[string]string, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (map[string]string, error) {
-					_, err := gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", "")(c, queryParams, historyRequests, resultMap)
-					if err != nil {
-						return nil, err
-					}
-
-					if queryOptions.beforeBuilderCallback != nil {
-						innerBuilder, err := queryOptions.beforeBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return nil, err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return c.GetQueryParams().Map(), nil
-				},
-			}, gateway.WithRequestResponseCallback(
-				func(c *api.Context, response *http_client.Response, historyRequests []gateway.BuilderRequest, resultMap map[string]any) error {
-					if queryOptions.afterBuilderCallback != nil {
-						innerBuilder, err := queryOptions.afterBuilderCallback(copyBuilder, c, historyRequests, resultMap)
-						if err != nil {
-							return err
-						}
-
-						copyBuilder = innerBuilder
-					}
-
-					return nil
-				})).
-			Build(queryMiddlewares...)
+		builder.GetRouteWithTenantID(domainPath+"/query",
+			func(requestBuilder *gateway.RequestBuilder) {
+				requestBuilder.
+					Get(
+						&gateway.GetRequest{
+							Url: simple.ServiceVersionedUrl + domainPath + "/query",
+						},
+						gateway.WithBeforeRequestCallback(
+							func(requestBuilder *gateway.RequestBuilder) error {
+								if queryOptions.beforeBuilderCallback != nil {
+									err := queryOptions.beforeBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							}),
+						gateway.WithRequestResponseCallback(
+							func(requestBuilder *gateway.RequestBuilder, response *http_client.Response) error {
+								if queryOptions.afterBuilderCallback != nil {
+									err := queryOptions.afterBuilderCallback(requestBuilder)
+									if err != nil {
+										return err
+									}
+								}
+
+								return nil
+							})).
+					Request()
+			}, queryMiddlewares...)
 	}
 }
 
-type BuilderCallback func(builder *gateway.Builder, c *api.Context, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (*gateway.Builder, error)
+type RequestBuilderCallback func(requestBuilder *gateway.RequestBuilder) error
 
 type GlobalOption func(options *GlobalOptions)
 type CreateOption func(options *CreateOptions)
@@ -202,7 +178,7 @@ type DeleteOption func(options *DeleteOptions)
 type QueryOption func(options *QueryOptions)
 
 type GlobalOptions struct {
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type CreateOptions struct {
@@ -210,13 +186,13 @@ type CreateOptions struct {
 	disable bool
 
 	// 创建请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 创建请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 创建中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type DeleteOptions struct {
@@ -224,13 +200,13 @@ type DeleteOptions struct {
 	disable bool
 
 	// 删除请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 删除请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 删除中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
 type QueryOptions struct {
@@ -238,34 +214,34 @@ type QueryOptions struct {
 	disable bool
 
 	// 查询请求前回调
-	beforeBuilderCallback BuilderCallback
+	beforeBuilderCallback RequestBuilderCallback
 
 	// 查询请求后回调
-	afterBuilderCallback BuilderCallback
+	afterBuilderCallback RequestBuilderCallback
 
 	// 查询中间件
-	middlewares []api.Handler
+	middlewares []gateway.Handler
 }
 
-func WithGlobalMiddlewares(middlewares ...api.Handler) GlobalOption {
+func WithGlobalMiddlewares(middlewares ...gateway.Handler) GlobalOption {
 	return func(options *GlobalOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithBeforeCreateBuilderCallback(callbacks BuilderCallback) CreateOption {
+func WithBeforeCreateBuilderCallback(callbacks RequestBuilderCallback) CreateOption {
 	return func(options *CreateOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterCreateBuilderCallback(callbacks BuilderCallback) CreateOption {
+func WithAfterCreateBuilderCallback(callbacks RequestBuilderCallback) CreateOption {
 	return func(options *CreateOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithCreateMiddlewares(middlewares []api.Handler) CreateOption {
+func WithCreateMiddlewares(middlewares []gateway.Handler) CreateOption {
 	return func(options *CreateOptions) {
 		options.middlewares = middlewares
 	}
@@ -277,19 +253,19 @@ func WithDisableDelete() DeleteOption {
 	}
 }
 
-func WithBeforeDeleteBuilderCallback(callbacks BuilderCallback) DeleteOption {
+func WithBeforeDeleteBuilderCallback(callbacks RequestBuilderCallback) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterDeleteBuilderCallback(callbacks BuilderCallback) DeleteOption {
+func WithAfterDeleteBuilderCallback(callbacks RequestBuilderCallback) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithDeleteMiddlewares(middlewares []api.Handler) DeleteOption {
+func WithDeleteMiddlewares(middlewares []gateway.Handler) DeleteOption {
 	return func(options *DeleteOptions) {
 		options.middlewares = middlewares
 	}
@@ -301,19 +277,19 @@ func WithDisableQuery() QueryOption {
 	}
 }
 
-func WithBeforeQueryBuilderCallback(callbacks BuilderCallback) QueryOption {
+func WithBeforeQueryBuilderCallback(callbacks RequestBuilderCallback) QueryOption {
 	return func(options *QueryOptions) {
 		options.beforeBuilderCallback = callbacks
 	}
 }
 
-func WithAfterQueryBuilderCallback(callbacks BuilderCallback) QueryOption {
+func WithAfterQueryBuilderCallback(callbacks RequestBuilderCallback) QueryOption {
 	return func(options *QueryOptions) {
 		options.afterBuilderCallback = callbacks
 	}
 }
 
-func WithQueryMiddlewares(middlewares []api.Handler) QueryOption {
+func WithQueryMiddlewares(middlewares []gateway.Handler) QueryOption {
 	return func(options *QueryOptions) {
 		options.middlewares = middlewares
 	}

+ 129 - 94
framework/gateway/builder.go

@@ -3,25 +3,16 @@ package gateway
 import (
 	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-tools/utils/http_client"
-	"github.com/gin-gonic/gin"
-	"github.com/pkg/errors"
+	"net/http"
 	"time"
 )
 
-type LocalServiceFunc func(c *gin.Context)
-
-type GlobalRequestResponseCallback func(c *api.Context, request BuilderRequest, historyRequests []BuilderRequest, resultMap map[string]any) error
-type RequestResponseCallback func(c *api.Context, response *http_client.Response, historyRequests []BuilderRequest, resultMap map[string]any) error
-
-type ResponseSuccessCallback func(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any)
-type ResponseErrorCallback func(c *api.Context, err error)
+type Handler func(requestBuilder *RequestBuilder)
 
 type Builder struct {
 	router         api.Router
 	httpClient     *http_client.Client
 	httpTimeoutSec int64
-
-	params *builderParams
 }
 
 func newBuilder(router api.Router, httpClient *http_client.Client, httpTimeoutSec int64) *Builder {
@@ -29,127 +20,171 @@ func newBuilder(router api.Router, httpClient *http_client.Client, httpTimeoutSe
 		router:         router,
 		httpClient:     httpClient,
 		httpTimeoutSec: httpTimeoutSec,
-		params:         newBuilderParams(),
 	}
 }
 
-func (builder *Builder) Url(httpMethod string, relativePath string) *Builder {
-	copyBuilder := builder.copy()
-	copyBuilder.params.httpMethod = httpMethod
-	copyBuilder.params.relativePath = relativePath
-	return copyBuilder
+func (builder *Builder) PostRoute(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRoute(http.MethodPost, relativePath, handler, middlewares...)
 }
 
-type RequestOption func(options *RequestOptions)
+func (builder *Builder) DeleteRoute(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRoute(http.MethodDelete, relativePath, handler, middlewares...)
+}
 
-type RequestOptions struct {
-	requestResponseCallback RequestResponseCallback
+func (builder *Builder) PutRoute(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRoute(http.MethodPut, relativePath, handler, middlewares...)
 }
 
-func WithRequestResponseCallback(callback RequestResponseCallback) RequestOption {
-	return func(options *RequestOptions) {
-		options.requestResponseCallback = callback
-	}
+func (builder *Builder) GetRoute(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRoute(http.MethodGet, relativePath, handler, middlewares...)
 }
 
-func (builder *Builder) Post(request *PostRequest, opts ...RequestOption) *Builder {
-	return builder.request(request, opts...)
+func (builder *Builder) PostRouteWithTenantIDAndUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, "tenantId", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) Delete(request *DeleteRequest, opts ...RequestOption) *Builder {
-	return builder.request(request, opts...)
+func (builder *Builder) DeleteRouteWithTenantIDAndUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, "tenantId", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) Put(request *PutRequest, opts ...RequestOption) *Builder {
-	return builder.request(request, opts...)
+func (builder *Builder) PutRouteWithTenantIDAndUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, "tenantId", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) Get(request *GetRequest, opts ...RequestOption) *Builder {
-	return builder.request(request, opts...)
+func (builder *Builder) GetRouteWithTenantIDAndUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, "tenantId", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) request(builderRequest BuilderRequest, opts ...RequestOption) *Builder {
-	options := new(RequestOptions)
-	for _, opt := range opts {
-		opt(options)
-	}
+func (builder *Builder) PostRouteWithTenantID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, "tenantId", "", handler, middlewares...)
+}
+
+func (builder *Builder) DeleteRouteWithTenantID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, "tenantId", "", handler, middlewares...)
+}
+
+func (builder *Builder) PutRouteWithTenantID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, "tenantId", "", handler, middlewares...)
+}
 
-	return builder.addRequest(newBuilderRequestItem(builderRequest, options))
+func (builder *Builder) GetRouteWithTenantID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, "tenantId", "", handler, middlewares...)
 }
 
-func (builder *Builder) GlobalRequestCallback(globalRequestResponseCallback GlobalRequestResponseCallback) *Builder {
-	copyBuilder := builder.copy()
-	copyBuilder.params.globalRequestResponseCallback = globalRequestResponseCallback
-	return copyBuilder
+func (builder *Builder) PostRouteWithUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, "", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) ResponseSuccessCallback(responseSuccessCallback ResponseSuccessCallback) *Builder {
-	copyBuilder := builder.copy()
-	copyBuilder.params.responseSuccessCallback = responseSuccessCallback
-	return copyBuilder
+func (builder *Builder) DeleteRouteWithUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, "", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) ResponseErrorCallback(responseErrorCallback ResponseErrorCallback) *Builder {
-	copyBuilder := builder.copy()
-	copyBuilder.params.responseErrorCallback = responseErrorCallback
-	return copyBuilder
+func (builder *Builder) PutRouteWithUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, "", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) Local(handler api.Handler, middlewares ...api.Handler) {
-	copyBuilder := builder.copy()
-	copyBuilder.router.AddRoute(builder.params.httpMethod, builder.params.relativePath, append(middlewares, handler)...)
+func (builder *Builder) GetRouteWithUserID(relativePath string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, "", "userId", handler, middlewares...)
 }
 
-func (builder *Builder) Build(middlewares ...api.Handler) {
-	copyBuilder := builder.copy()
-	copyBuilder.router.AddRoute(builder.params.httpMethod, builder.params.relativePath, append(middlewares,
-		func(c *api.Context) {
-			httpRequest := builder.httpClient.NewRequest(http_client.WithNewRequestTimeout(time.Duration(builder.httpTimeoutSec) * time.Second))
-			historyRequests := make([]BuilderRequest, 0)
-			resultMap := make(map[string]any)
+func (builder *Builder) PostRouteWithTenantIDAndUserIDCommon(relativePath string, tenantIDField string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, tenantIDField, "userId", handler, middlewares...)
+}
 
-			for _, requestItem := range builder.params.requestItems {
-				requestWithResponse, err := requestItem.builderRequest.Request(c, httpRequest, historyRequests, resultMap)
-				if err != nil {
-					builder.params.responseErrorCallback(c, errors.New(err.Error()))
-					return
-				}
+func (builder *Builder) DeleteRouteWithTenantIDAndUserIDCommon(relativePath string, tenantIDField string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, tenantIDField, userIDField, handler, middlewares...)
+}
 
-				historyRequests = append(historyRequests, requestWithResponse)
+func (builder *Builder) PutRouteWithTenantIDAndUserIDCommon(relativePath string, tenantIDField string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, tenantIDField, userIDField, handler, middlewares...)
+}
 
-				if requestItem.options.requestResponseCallback != nil {
-					err := requestItem.options.requestResponseCallback(c, requestWithResponse.Response(), historyRequests, resultMap)
-					if err != nil {
-						builder.params.responseErrorCallback(c, errors.New(err.Error()))
-						return
-					}
+func (builder *Builder) GetRouteWithTenantIDAndUserIDCommon(relativePath string, tenantIDField string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, tenantIDField, userIDField, handler, middlewares...)
+}
 
-					continue
-				}
+func (builder *Builder) PostRouteWithTenantIDCommon(relativePath string, tenantIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, tenantIDField, "", handler, middlewares...)
+}
 
-				if builder.params.globalRequestResponseCallback != nil {
-					err := builder.params.globalRequestResponseCallback(c, requestWithResponse, historyRequests, resultMap)
-					if err != nil {
-						builder.params.responseErrorCallback(c, errors.New(err.Error()))
-						return
-					}
+func (builder *Builder) DeleteRouteWithTenantIDCommon(relativePath string, tenantIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, tenantIDField, "", handler, middlewares...)
+}
 
-					continue
-				}
-			}
+func (builder *Builder) PutRouteWithTenantIDCommon(relativePath string, tenantIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, tenantIDField, "", handler, middlewares...)
+}
 
-			builder.params.responseSuccessCallback(c, historyRequests, resultMap)
-		})...)
+func (builder *Builder) GetRouteWithTenantIDCommon(relativePath string, tenantIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, tenantIDField, "", handler, middlewares...)
 }
 
-func (builder *Builder) addRequest(item *builderRequestItem) *Builder {
-	copyBuilder := builder.copy()
-	copyBuilder.params.requestItems = append(copyBuilder.params.requestItems, item)
-	return copyBuilder
+func (builder *Builder) PostRouteWithUserIDCommon(relativePath string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPost, relativePath, "", userIDField, handler, middlewares...)
 }
 
-func (builder *Builder) copy() *Builder {
-	copyBuilder := newBuilder(builder.router, builder.httpClient, builder.httpTimeoutSec)
-	copyBuilder.params = builder.params.copy()
-	return copyBuilder
+func (builder *Builder) DeleteRouteWithUserIDCommon(relativePath string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodDelete, relativePath, "", userIDField, handler, middlewares...)
+}
+
+func (builder *Builder) PutRouteWithUserIDCommon(relativePath string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodPut, relativePath, "", userIDField, handler, middlewares...)
+}
+
+func (builder *Builder) GetRouteWithUserIDCommon(relativePath string, userIDField string, handler Handler, middlewares ...Handler) {
+	builder.AddRouteWithTenantIDAndUserID(http.MethodGet, relativePath, "", userIDField, handler, middlewares...)
+}
+
+func (builder *Builder) AddRoute(httpMethod string, relativePath string, handler Handler, middlewares ...Handler) {
+	apiHandlers := make([]api.Handler, len(middlewares)+1)
+
+	apiHandlers[0] = builder.formApiHandler(handler)
+	for i, middleware := range middlewares {
+		apiHandlers[i+1] = builder.formApiHandler(middleware)
+	}
+
+	builder.router.AddRoute(httpMethod, relativePath, apiHandlers...)
+}
+
+func (builder *Builder) AddRouteWithTenantIDAndUserID(httpMethod string, relativePath string, tenantIDField string, userIDField string, handler Handler, middlewares ...Handler) {
+	apiHandlers := make([]api.Handler, len(middlewares)+1)
+
+	apiHandlers[0] = builder.formApiHandlerWithTenantIDAndUserID(httpMethod, tenantIDField, userIDField, handler)
+	for i, middleware := range middlewares {
+		apiHandlers[i+1] = builder.formApiHandlerWithTenantIDAndUserID(httpMethod, tenantIDField, userIDField, middleware)
+	}
+
+	builder.router.AddRoute(httpMethod, relativePath, apiHandlers...)
+}
+
+func (builder *Builder) formApiHandler(handler Handler) api.Handler {
+	return func(c *api.Context) {
+		httpRequest := builder.httpClient.NewRequest(http_client.WithNewRequestTimeout(time.Duration(builder.httpTimeoutSec) * time.Second))
+		requestBuilder := newRequestBuilder(c, httpRequest)
+		handler(requestBuilder)
+	}
+}
+
+func (builder *Builder) formApiHandlerWithTenantIDAndUserID(httpMethod string, tenantIDParamsName string, userIDParamsName string, handler Handler) api.Handler {
+	return func(c *api.Context) {
+		httpRequest := builder.httpClient.NewRequest(http_client.WithNewRequestTimeout(time.Duration(builder.httpTimeoutSec) * time.Second))
+		requestBuilder := newRequestBuilder(c, httpRequest)
+
+		switch httpMethod {
+		case http.MethodPost, http.MethodPut:
+			err := AddJsonBodyTenantIDAndUserID(requestBuilder, tenantIDParamsName, userIDParamsName)
+			if err != nil {
+				panic(err)
+			}
+		case http.MethodDelete, http.MethodGet:
+			err := AddQueryParamsTenantIDAndUserID(requestBuilder, tenantIDParamsName, userIDParamsName)
+			if err != nil {
+				panic(err)
+			}
+		default:
+			panic("不支持的http方法s")
+		}
+
+		handler(requestBuilder)
+	}
 }

+ 0 - 65
framework/gateway/builder_params.go

@@ -1,65 +0,0 @@
-package gateway
-
-import (
-	"git.sxidc.com/go-framework/baize/framework/core/api"
-	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/logger"
-	"github.com/pkg/errors"
-	"net/http"
-)
-
-type builderParams struct {
-	httpMethod                    string
-	relativePath                  string
-	requestItems                  []*builderRequestItem
-	globalRequestResponseCallback GlobalRequestResponseCallback
-	responseSuccessCallback       ResponseSuccessCallback
-	responseErrorCallback         ResponseErrorCallback
-}
-
-func newBuilderParams() *builderParams {
-	return &builderParams{
-		httpMethod:                    "",
-		relativePath:                  "",
-		requestItems:                  make([]*builderRequestItem, 0),
-		globalRequestResponseCallback: nil,
-		responseSuccessCallback: func(c *api.Context, historyRequests []BuilderRequest, customResultMap map[string]any) {
-			c.Status(http.StatusOK)
-
-			if historyRequests != nil && len(historyRequests) != 0 {
-				_, err := c.Writer.Write(historyRequests[len(historyRequests)-1].Response().Body())
-				if err != nil {
-					logger.GetInstance().Error(errors.New(err.Error()))
-					c.AbortWithStatus(http.StatusInternalServerError)
-					return
-				}
-			}
-
-			c.Writer.Flush()
-		},
-		responseErrorCallback: func(c *api.Context, err error) {
-			if err == nil {
-				return
-			}
-
-			resp := make(map[string]any)
-			logger.GetInstance().Error(err)
-
-			resp["success"] = false
-			resp["errCode"] = http.StatusOK
-			resp["msg"] = err.Error()
-
-			c.JSON(http.StatusOK, resp)
-		},
-	}
-}
-
-func (params *builderParams) copy() *builderParams {
-	return &builderParams{
-		httpMethod:                    params.httpMethod,
-		relativePath:                  params.relativePath,
-		requestItems:                  params.requestItems,
-		globalRequestResponseCallback: params.globalRequestResponseCallback,
-		responseSuccessCallback:       params.responseSuccessCallback,
-		responseErrorCallback:         params.responseErrorCallback,
-	}
-}

+ 34 - 235
framework/gateway/builder_request.go

@@ -5,57 +5,21 @@ import (
 	"git.sxidc.com/go-tools/utils/http_client"
 )
 
-type UrlFormFunc func(c *api.Context, staticUrl string, historyRequests []BuilderRequest, resultMap map[string]any) (string, error)
-type HeadersFormFunc func(c *api.Context, staticHeaders map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error)
-type BodyFormFunc func(c *api.Context, staticBody any, historyRequests []BuilderRequest, resultMap map[string]any) (any, error)
-type QueryParamsFormFunc func(c *api.Context, staticQueryParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error)
-type PathParamsFormFunc func(c *api.Context, staticPathParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error)
-
-func FormJsonBodyWithTenantIDAndUserIDFunc(tenantIDFieldName string, userIDFieldName string) BodyFormFunc {
-	return func(c *api.Context, staticBody any, historyRequests []BuilderRequest, resultMap map[string]any) (any, error) {
-		err := AddJsonBodyTenantIDAndUserID(c, tenantIDFieldName, userIDFieldName)
-		if err != nil {
-			return nil, err
-		}
-
-		jsonBody, err := c.GetJsonBody()
-		if err != nil {
-			return nil, err
-		}
-
-		return jsonBody.Map(), nil
-	}
-}
-
-func FormQueryParamsWithTenantIDAndUserIDFunc(tenantIDFieldName string, userIDFieldName string) QueryParamsFormFunc {
-	return func(c *api.Context, staticQueryParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error) {
-		err := AddQueryParamsTenantIDAndUserID(c, tenantIDFieldName, userIDFieldName)
-		if err != nil {
-			return nil, err
-		}
-
-		return c.GetQueryParams().Map(), nil
-	}
-}
-
-type BuilderRequest interface {
-	Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error)
+type Request interface {
+	Request(c *api.Context, request *http_client.Request) (Request, error)
 	Response() *http_client.Response
 }
 
 type PostRequest struct {
-	Url             string
-	Body            any
-	UrlFormFunc     UrlFormFunc
-	BodyFormFunc    BodyFormFunc
-	HeadersFormFunc HeadersFormFunc
+	Url  string
+	Body any
 
 	headers  map[string]string
 	response *http_client.Response
 }
 
-func (req *PostRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) {
-	preparedRequest, err := req.prepare(c, historyRequests, resultMap)
+func (req *PostRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
+	preparedRequest, err := req.prepare(c)
 	if err != nil {
 		return nil, err
 	}
@@ -75,13 +39,10 @@ func (req *PostRequest) Response() *http_client.Response {
 	return req.response
 }
 
-func (req *PostRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*PostRequest, error) {
+func (req *PostRequest) prepare(c *api.Context) (*PostRequest, error) {
 	preparedRequest := &PostRequest{
-		Url:             req.Url,
-		Body:            req.Body,
-		UrlFormFunc:     req.UrlFormFunc,
-		HeadersFormFunc: req.HeadersFormFunc,
-		BodyFormFunc:    req.BodyFormFunc,
+		Url:  req.Url,
+		Body: req.Body,
 	}
 
 	// 赋值默认body
@@ -97,54 +58,20 @@ func (req *PostRequest) prepare(c *api.Context, historyRequests []BuilderRequest
 	// 赋值默认headers
 	preparedRequest.headers = c.GetHeader().Map()
 
-	// 构造url
-	if preparedRequest.UrlFormFunc != nil {
-		formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Url = formedUrl
-	}
-
-	// 构造body
-	if preparedRequest.BodyFormFunc != nil {
-		formedBody, err := preparedRequest.BodyFormFunc(c, preparedRequest.Body, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Body = formedBody
-	}
-
-	// 构造headers
-	if preparedRequest.HeadersFormFunc != nil {
-		formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.headers = formedHeaders
-	}
-
 	return preparedRequest, nil
 }
 
 type DeleteRequest struct {
-	Url                 string
-	QueryParams         map[string]string
-	PathParams          map[string]string
-	UrlFormFunc         UrlFormFunc
-	HeadersFormFunc     HeadersFormFunc
-	QueryParamsFormFunc QueryParamsFormFunc
-	PathParamsFormFunc  PathParamsFormFunc
+	Url         string
+	QueryParams map[string]string
+	PathParams  map[string]string
 
 	headers  map[string]string
 	response *http_client.Response
 }
 
-func (req *DeleteRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) {
-	preparedRequest, err := req.prepare(c, historyRequests, resultMap)
+func (req *DeleteRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
+	preparedRequest, err := req.prepare(c)
 	if err != nil {
 		return nil, err
 	}
@@ -166,15 +93,11 @@ func (req *DeleteRequest) Response() *http_client.Response {
 	return req.response
 }
 
-func (req *DeleteRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*DeleteRequest, error) {
+func (req *DeleteRequest) prepare(c *api.Context) (*DeleteRequest, error) {
 	preparedRequest := &DeleteRequest{
-		Url:                 req.Url,
-		QueryParams:         req.QueryParams,
-		PathParams:          req.PathParams,
-		UrlFormFunc:         req.UrlFormFunc,
-		HeadersFormFunc:     req.HeadersFormFunc,
-		QueryParamsFormFunc: req.QueryParamsFormFunc,
-		PathParamsFormFunc:  req.PathParamsFormFunc,
+		Url:         req.Url,
+		QueryParams: req.QueryParams,
+		PathParams:  req.PathParams,
 	}
 
 	// 赋值默认查询参数
@@ -190,62 +113,19 @@ func (req *DeleteRequest) prepare(c *api.Context, historyRequests []BuilderReque
 	// 赋值默认headers
 	preparedRequest.headers = c.GetHeader().Map()
 
-	// 构造url
-	if preparedRequest.UrlFormFunc != nil {
-		formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Url = formedUrl
-	}
-
-	// 构造查询参数
-	if preparedRequest.QueryParamsFormFunc != nil {
-		formedQueryParams, err := preparedRequest.QueryParamsFormFunc(c, preparedRequest.QueryParams, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.QueryParams = formedQueryParams
-	}
-
-	// 构造路径参数
-	if preparedRequest.PathParamsFormFunc != nil {
-		formedPathParams, err := preparedRequest.PathParamsFormFunc(c, preparedRequest.PathParams, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.PathParams = formedPathParams
-	}
-
-	// 构造headers
-	if preparedRequest.HeadersFormFunc != nil {
-		formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.headers = formedHeaders
-	}
-
 	return preparedRequest, nil
 }
 
 type PutRequest struct {
-	Url             string
-	Body            any
-	UrlFormFunc     UrlFormFunc
-	BodyFormFunc    BodyFormFunc
-	HeadersFormFunc HeadersFormFunc
+	Url  string
+	Body any
 
 	headers  map[string]string
 	response *http_client.Response
 }
 
-func (req *PutRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) {
-	preparedRequest, err := req.prepare(c, historyRequests, resultMap)
+func (req *PutRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
+	preparedRequest, err := req.prepare(c)
 	if err != nil {
 		return nil, err
 	}
@@ -265,13 +145,10 @@ func (req *PutRequest) Response() *http_client.Response {
 	return req.response
 }
 
-func (req *PutRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*PutRequest, error) {
+func (req *PutRequest) prepare(c *api.Context) (*PutRequest, error) {
 	preparedRequest := &PutRequest{
-		Url:             req.Url,
-		Body:            req.Body,
-		UrlFormFunc:     req.UrlFormFunc,
-		HeadersFormFunc: req.HeadersFormFunc,
-		BodyFormFunc:    req.BodyFormFunc,
+		Url:  req.Url,
+		Body: req.Body,
 	}
 
 	// 赋值默认body
@@ -287,54 +164,20 @@ func (req *PutRequest) prepare(c *api.Context, historyRequests []BuilderRequest,
 	// 赋值默认headers
 	preparedRequest.headers = c.GetHeader().Map()
 
-	// 构造url
-	if preparedRequest.UrlFormFunc != nil {
-		formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Url = formedUrl
-	}
-
-	// 构造body
-	if preparedRequest.BodyFormFunc != nil {
-		formedBody, err := preparedRequest.BodyFormFunc(c, preparedRequest.Body, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Body = formedBody
-	}
-
-	// 构造headers
-	if preparedRequest.HeadersFormFunc != nil {
-		formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.headers = formedHeaders
-	}
-
 	return preparedRequest, nil
 }
 
 type GetRequest struct {
-	Url                 string
-	QueryParams         map[string]string
-	PathParams          map[string]string
-	UrlFormFunc         UrlFormFunc
-	HeadersFormFunc     HeadersFormFunc
-	QueryParamsFormFunc QueryParamsFormFunc
-	PathParamsFormFunc  PathParamsFormFunc
+	Url         string
+	QueryParams map[string]string
+	PathParams  map[string]string
 
 	headers  map[string]string
 	response *http_client.Response
 }
 
-func (req *GetRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) {
-	preparedRequest, err := req.prepare(c, historyRequests, resultMap)
+func (req *GetRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
+	preparedRequest, err := req.prepare(c)
 	if err != nil {
 		return nil, err
 	}
@@ -356,15 +199,11 @@ func (req *GetRequest) Response() *http_client.Response {
 	return req.response
 }
 
-func (req *GetRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*DeleteRequest, error) {
+func (req *GetRequest) prepare(c *api.Context) (*DeleteRequest, error) {
 	preparedRequest := &DeleteRequest{
-		Url:                 req.Url,
-		QueryParams:         req.QueryParams,
-		PathParams:          req.PathParams,
-		UrlFormFunc:         req.UrlFormFunc,
-		HeadersFormFunc:     req.HeadersFormFunc,
-		QueryParamsFormFunc: req.QueryParamsFormFunc,
-		PathParamsFormFunc:  req.PathParamsFormFunc,
+		Url:         req.Url,
+		QueryParams: req.QueryParams,
+		PathParams:  req.PathParams,
 	}
 
 	// 赋值默认查询参数
@@ -380,45 +219,5 @@ func (req *GetRequest) prepare(c *api.Context, historyRequests []BuilderRequest,
 	// 赋值默认headers
 	preparedRequest.headers = c.GetHeader().Map()
 
-	// 构造url
-	if preparedRequest.UrlFormFunc != nil {
-		formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.Url = formedUrl
-	}
-
-	// 构造查询参数
-	if preparedRequest.QueryParamsFormFunc != nil {
-		formedQueryParams, err := preparedRequest.QueryParamsFormFunc(c, preparedRequest.QueryParams, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.QueryParams = formedQueryParams
-	}
-
-	// 构造路径参数
-	if preparedRequest.PathParamsFormFunc != nil {
-		formedPathParams, err := preparedRequest.PathParamsFormFunc(c, preparedRequest.PathParams, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.PathParams = formedPathParams
-	}
-
-	// 构造headers
-	if preparedRequest.HeadersFormFunc != nil {
-		formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap)
-		if err != nil {
-			return nil, err
-		}
-
-		preparedRequest.headers = formedHeaders
-	}
-
 	return preparedRequest, nil
 }

+ 2 - 2
framework/gateway/builder_request_item.go

@@ -1,11 +1,11 @@
 package gateway
 
 type builderRequestItem struct {
-	builderRequest BuilderRequest
+	builderRequest Request
 	options        *RequestOptions
 }
 
-func newBuilderRequestItem(builderRequest BuilderRequest, options *RequestOptions) *builderRequestItem {
+func newBuilderRequestItem(builderRequest Request, options *RequestOptions) *builderRequestItem {
 	return &builderRequestItem{
 		builderRequest: builderRequest,
 		options:        options,

+ 10 - 11
framework/gateway/common.go

@@ -1,12 +1,11 @@
 package gateway
 
 import (
-	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-tools/utils/strutils"
 )
 
-func AddJsonBodyTenantIDAndUserID(c *api.Context, tenantIDField string, userIDField string) error {
-	jsonBody, err := c.GetJsonBody()
+func AddJsonBodyTenantIDAndUserID(requestBuilder *RequestBuilder, tenantIDField string, userIDField string) error {
+	jsonBody, err := requestBuilder.c.GetJsonBody()
 	if err != nil {
 		return err
 	}
@@ -14,7 +13,7 @@ func AddJsonBodyTenantIDAndUserID(c *api.Context, tenantIDField string, userIDFi
 	if strutils.IsStringNotEmpty(tenantIDField) {
 		tenantID := jsonBody.Get(tenantIDField)
 		if tenantID == nil {
-			tenantInfo := c.GetTenantInfo()
+			tenantInfo := requestBuilder.c.GetTenantInfo()
 
 			if tenantInfo != nil {
 				jsonBody.Set(tenantIDField, tenantInfo.GetID())
@@ -27,7 +26,7 @@ func AddJsonBodyTenantIDAndUserID(c *api.Context, tenantIDField string, userIDFi
 	if strutils.IsStringNotEmpty(userIDField) {
 		userID := jsonBody.Get(userIDField)
 		if userID == nil {
-			userInfo := c.GetUserInfo()
+			userInfo := requestBuilder.c.GetUserInfo()
 
 			if userInfo != nil {
 				jsonBody.Set(userIDField, userInfo.GetID())
@@ -40,20 +39,20 @@ func AddJsonBodyTenantIDAndUserID(c *api.Context, tenantIDField string, userIDFi
 	return nil
 }
 
-func AddQueryParamsTenantIDAndUserID(c *api.Context, tenantIDField string, userIDField string) error {
-	queryParams := c.GetQueryParams()
+func AddQueryParamsTenantIDAndUserID(requestBuilder *RequestBuilder, tenantIDField string, userIDField string) error {
+	queryParams := requestBuilder.c.GetQueryParams()
 
-	if c.GetTenantInfo() != nil && strutils.IsStringNotEmpty(tenantIDField) {
+	if requestBuilder.c.GetTenantInfo() != nil && strutils.IsStringNotEmpty(tenantIDField) {
 		tenantID := queryParams.Get(tenantIDField)
 		if strutils.IsStringEmpty(tenantID) {
-			queryParams.Set(tenantIDField, c.GetTenantInfo().GetID())
+			queryParams.Set(tenantIDField, requestBuilder.c.GetTenantInfo().GetID())
 		}
 	}
 
-	if c.GetUserInfo() != nil && strutils.IsStringNotEmpty(userIDField) {
+	if requestBuilder.c.GetUserInfo() != nil && strutils.IsStringNotEmpty(userIDField) {
 		userID := queryParams.Get(userIDField)
 		if strutils.IsStringEmpty(userID) {
-			queryParams.Set(userIDField, c.GetUserInfo().GetID())
+			queryParams.Set(userIDField, requestBuilder.c.GetUserInfo().GetID())
 		}
 	}
 

+ 138 - 0
framework/gateway/request_builder.go

@@ -0,0 +1,138 @@
+package gateway
+
+import (
+	"git.sxidc.com/go-framework/baize/framework/core/api"
+	"git.sxidc.com/go-tools/utils/http_client"
+	"github.com/pkg/errors"
+)
+
+type ResponseSuccessCallback func(requestBuilder *RequestBuilder)
+type ResponseErrorCallback func(requestBuilder *RequestBuilder, err error)
+type BeforeRequestCallback func(requestBuilder *RequestBuilder) error
+type RequestResponseCallback func(requestBuilder *RequestBuilder, response *http_client.Response) error
+
+type RequestOption func(options *RequestOptions)
+
+type RequestOptions struct {
+	beforeRequestCallback   BeforeRequestCallback
+	requestResponseCallback RequestResponseCallback
+}
+
+func WithBeforeRequestCallback(callback BeforeRequestCallback) RequestOption {
+	return func(options *RequestOptions) {
+		options.beforeRequestCallback = callback
+	}
+}
+
+func WithRequestResponseCallback(callback RequestResponseCallback) RequestOption {
+	return func(options *RequestOptions) {
+		options.requestResponseCallback = callback
+	}
+}
+
+type RequestBuilder struct {
+	c               *api.Context
+	historyRequests []Request
+	resultMap       map[string]any
+
+	httpRequest *http_client.Request
+	params      *requestBuilderParams
+}
+
+func newRequestBuilder(c *api.Context, httpRequest *http_client.Request) *RequestBuilder {
+	return &RequestBuilder{
+		c:               c,
+		historyRequests: make([]Request, 0),
+		resultMap:       make(map[string]any),
+		httpRequest:     httpRequest,
+		params:          newRequestBuilderParams(),
+	}
+}
+
+func (builder *RequestBuilder) Context() *api.Context {
+	return builder.c
+}
+
+func (builder *RequestBuilder) HistoryRequests() []Request {
+	return builder.historyRequests
+}
+
+func (builder *RequestBuilder) GetResultMapValue(key string) any {
+	return builder.resultMap[key]
+}
+
+func (builder *RequestBuilder) SetResultMapValue(key string, value any) {
+	builder.resultMap[key] = value
+}
+
+func (builder *RequestBuilder) Post(request *PostRequest, opts ...RequestOption) *RequestBuilder {
+	return builder.request(request, opts...)
+}
+
+func (builder *RequestBuilder) Delete(request *DeleteRequest, opts ...RequestOption) *RequestBuilder {
+	return builder.request(request, opts...)
+}
+
+func (builder *RequestBuilder) Put(request *PutRequest, opts ...RequestOption) *RequestBuilder {
+	return builder.request(request, opts...)
+}
+
+func (builder *RequestBuilder) Get(request *GetRequest, opts ...RequestOption) *RequestBuilder {
+	return builder.request(request, opts...)
+}
+
+func (builder *RequestBuilder) request(builderRequest Request, opts ...RequestOption) *RequestBuilder {
+	options := new(RequestOptions)
+	for _, opt := range opts {
+		opt(options)
+	}
+
+	builder.params.requestItems = append(builder.params.requestItems, newBuilderRequestItem(builderRequest, options))
+	return builder
+}
+
+func (builder *RequestBuilder) ResponseSuccessCallback(responseSuccessCallback ResponseSuccessCallback) *RequestBuilder {
+	builder.params.responseSuccessCallback = responseSuccessCallback
+	return builder
+}
+
+func (builder *RequestBuilder) ResponseErrorCallback(responseErrorCallback ResponseErrorCallback) *RequestBuilder {
+	builder.params.responseErrorCallback = responseErrorCallback
+	return builder
+}
+
+func (builder *RequestBuilder) Request() {
+	httpRequest := builder.httpRequest
+
+	for _, requestItem := range builder.params.requestItems {
+		if requestItem.options.beforeRequestCallback != nil {
+			err := requestItem.options.beforeRequestCallback(builder)
+			if err != nil {
+				builder.params.responseErrorCallback(builder, errors.New(err.Error()))
+				return
+			}
+		}
+
+		requestWithResponse, err := requestItem.builderRequest.Request(builder.c, httpRequest)
+		if err != nil {
+			builder.params.responseErrorCallback(builder, errors.New(err.Error()))
+			return
+		}
+
+		builder.historyRequests = append(builder.historyRequests, requestWithResponse)
+
+		if requestItem.options.requestResponseCallback != nil {
+			err := requestItem.options.requestResponseCallback(builder, requestWithResponse.Response())
+			if err != nil {
+				builder.params.responseErrorCallback(builder, errors.New(err.Error()))
+				return
+			}
+		}
+	}
+
+	builder.params.responseSuccessCallback(builder)
+}
+
+func (builder *RequestBuilder) ResponseError(err error) {
+	builder.params.responseErrorCallback(builder, err)
+}

+ 51 - 0
framework/gateway/request_builder_params.go

@@ -0,0 +1,51 @@
+package gateway
+
+import (
+	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/logger"
+	"github.com/pkg/errors"
+	"net/http"
+)
+
+type requestBuilderParams struct {
+	httpMethod              string
+	relativePath            string
+	requestItems            []*builderRequestItem
+	responseSuccessCallback ResponseSuccessCallback
+	responseErrorCallback   ResponseErrorCallback
+}
+
+func newRequestBuilderParams() *requestBuilderParams {
+	return &requestBuilderParams{
+		httpMethod:   "",
+		relativePath: "",
+		requestItems: make([]*builderRequestItem, 0),
+		responseSuccessCallback: func(requestBuilder *RequestBuilder) {
+			requestBuilder.c.Status(http.StatusOK)
+
+			if requestBuilder.historyRequests != nil && len(requestBuilder.historyRequests) != 0 {
+				_, err := requestBuilder.c.Writer.Write(requestBuilder.historyRequests[len(requestBuilder.historyRequests)-1].Response().Body())
+				if err != nil {
+					logger.GetInstance().Error(errors.New(err.Error()))
+					requestBuilder.c.AbortWithStatus(http.StatusInternalServerError)
+					return
+				}
+			}
+
+			requestBuilder.c.Writer.Flush()
+		},
+		responseErrorCallback: func(requestBuilder *RequestBuilder, err error) {
+			if err == nil {
+				return
+			}
+
+			resp := make(map[string]any)
+			logger.GetInstance().Error(err)
+
+			resp["success"] = false
+			resp["errCode"] = http.StatusOK
+			resp["msg"] = err.Error()
+
+			requestBuilder.c.JSON(http.StatusOK, resp)
+		},
+	}
+}