pass_through.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package pass_through
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/api"
  4. "git.sxidc.com/go-framework/baize/framework/gateway"
  5. "net/http"
  6. )
  7. func Post(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
  8. params.passThrough(builder, http.MethodPost, middlewares...)
  9. }
  10. func Delete(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
  11. params.passThrough(builder, http.MethodDelete, middlewares...)
  12. }
  13. func Put(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
  14. params.passThrough(builder, http.MethodPut, middlewares...)
  15. }
  16. func Get(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) {
  17. params.passThrough(builder, http.MethodGet, middlewares...)
  18. }
  19. func PostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
  20. params.passThrough(builder, http.MethodPost, middlewares...)
  21. }
  22. func DeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
  23. params.passThrough(builder, http.MethodDelete, middlewares...)
  24. }
  25. func PutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
  26. params.passThrough(builder, http.MethodPut, middlewares...)
  27. }
  28. func GetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) {
  29. params.passThrough(builder, http.MethodGet, middlewares...)
  30. }
  31. func PostCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
  32. params.passThrough(builder, http.MethodPost, middlewares...)
  33. }
  34. func DeleteCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
  35. params.passThrough(builder, http.MethodDelete, middlewares...)
  36. }
  37. func PutCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
  38. params.passThrough(builder, http.MethodPut, middlewares...)
  39. }
  40. func GetCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) {
  41. params.passThrough(builder, http.MethodGet, middlewares...)
  42. }
  43. type PassThroughRequestItem struct {
  44. Request gateway.BuilderRequest
  45. RequestResponseCallback gateway.RequestResponseCallback
  46. }
  47. type SimplePassThroughParams struct {
  48. RelativePath string
  49. Request gateway.BuilderRequest
  50. }
  51. func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
  52. passThroughParams := &PassThroughParams{
  53. HttpMethod: httpMethod,
  54. SimplePassThroughParams: params,
  55. }
  56. passThroughParams.passThrough(builder, middlewares...)
  57. }
  58. type PassThroughParams struct {
  59. HttpMethod string
  60. *SimplePassThroughParams
  61. }
  62. func (params *PassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
  63. copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
  64. switch req := params.Request.(type) {
  65. case *gateway.PostRequest:
  66. copyBuilder = copyBuilder.Post(req)
  67. case *gateway.DeleteRequest:
  68. copyBuilder = copyBuilder.Delete(req)
  69. case *gateway.PutRequest:
  70. copyBuilder = copyBuilder.Put(req)
  71. case *gateway.GetRequest:
  72. copyBuilder = copyBuilder.Get(req)
  73. default:
  74. panic("不支持的请求类型")
  75. }
  76. copyBuilder.Build(middlewares...)
  77. }
  78. type SimpleOnePassThroughParams struct {
  79. RelativePath string
  80. RequestItem *PassThroughRequestItem
  81. }
  82. func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
  83. onePassThroughParams := &OnePassThroughParams{
  84. HttpMethod: httpMethod,
  85. SimpleOnePassThroughParams: params,
  86. }
  87. onePassThroughParams.passThrough(builder, middlewares...)
  88. }
  89. type OnePassThroughParams struct {
  90. HttpMethod string
  91. *SimpleOnePassThroughParams
  92. }
  93. func (params *OnePassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
  94. copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
  95. switch req := params.RequestItem.Request.(type) {
  96. case *gateway.PostRequest:
  97. copyBuilder = copyBuilder.Post(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  98. case *gateway.DeleteRequest:
  99. copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  100. case *gateway.PutRequest:
  101. copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  102. case *gateway.GetRequest:
  103. copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  104. default:
  105. panic("不支持的请求类型")
  106. }
  107. copyBuilder.Build(middlewares...)
  108. }
  109. type SimpleCommonPassThroughParams struct {
  110. RelativePath string
  111. RequestItems []PassThroughRequestItem
  112. }
  113. func (params *SimpleCommonPassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) {
  114. passThroughParams := &CommonPassThroughParams{
  115. HttpMethod: httpMethod,
  116. SimpleCommonPassThroughParams: params,
  117. }
  118. passThroughParams.passThrough(builder, middlewares...)
  119. }
  120. type CommonPassThroughParams struct {
  121. HttpMethod string
  122. *SimpleCommonPassThroughParams
  123. }
  124. func (params *CommonPassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) {
  125. copyBuilder := builder.Url(params.HttpMethod, params.RelativePath)
  126. for _, requestItem := range params.RequestItems {
  127. switch req := requestItem.Request.(type) {
  128. case *gateway.PostRequest:
  129. copyBuilder = copyBuilder.Post(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
  130. case *gateway.DeleteRequest:
  131. copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
  132. case *gateway.PutRequest:
  133. copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
  134. case *gateway.GetRequest:
  135. copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback))
  136. default:
  137. panic("不支持的请求类型")
  138. }
  139. }
  140. copyBuilder.Build(middlewares...)
  141. }