pass_through.go 6.3 KB

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