pass_through.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. type PassThroughRequestItem struct {
  31. Request gateway.Request
  32. RequestResponseCallback gateway.RequestResponseCallback
  33. }
  34. type SimplePassThroughParams struct {
  35. RelativePath string
  36. Request gateway.Request
  37. }
  38. func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.Handler) {
  39. passThroughParams := &PassThroughParams{
  40. HttpMethod: httpMethod,
  41. SimplePassThroughParams: params,
  42. }
  43. passThroughParams.passThrough(builder, middlewares...)
  44. }
  45. type PassThroughParams struct {
  46. HttpMethod string
  47. *SimplePassThroughParams
  48. }
  49. func (params *PassThroughParams) passThrough(builder *gateway.Builder, middlewares ...gateway.Handler) {
  50. builder.AddRoute(params.HttpMethod, params.RelativePath,
  51. func(requestBuilder *gateway.RequestBuilder) {
  52. switch req := params.Request.(type) {
  53. case *gateway.PostRequest:
  54. requestBuilder.Post(req)
  55. case *gateway.DeleteRequest:
  56. requestBuilder.Delete(req)
  57. case *gateway.PutRequest:
  58. requestBuilder.Put(req)
  59. case *gateway.GetRequest:
  60. requestBuilder.Get(req)
  61. default:
  62. panic("不支持的请求类型")
  63. }
  64. requestBuilder.Request()
  65. }, middlewares...)
  66. }
  67. type SimpleOnePassThroughParams struct {
  68. RelativePath string
  69. RequestItem *PassThroughRequestItem
  70. }
  71. func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.Handler) {
  72. onePassThroughParams := &OnePassThroughParams{
  73. HttpMethod: httpMethod,
  74. SimpleOnePassThroughParams: params,
  75. }
  76. onePassThroughParams.passThrough(builder, middlewares...)
  77. }
  78. type OnePassThroughParams struct {
  79. HttpMethod string
  80. *SimpleOnePassThroughParams
  81. }
  82. func (params *OnePassThroughParams) passThrough(builder *gateway.Builder, middlewares ...gateway.Handler) {
  83. builder.AddRoute(params.HttpMethod, params.RelativePath,
  84. func(requestBuilder *gateway.RequestBuilder) {
  85. switch req := params.RequestItem.Request.(type) {
  86. case *gateway.PostRequest:
  87. requestBuilder.Post(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  88. case *gateway.DeleteRequest:
  89. requestBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  90. case *gateway.PutRequest:
  91. requestBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  92. case *gateway.GetRequest:
  93. requestBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback))
  94. default:
  95. panic("不支持的请求类型")
  96. }
  97. requestBuilder.Request()
  98. }, middlewares...)
  99. }