pass_through.go 6.4 KB

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