builder_request.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package gateway
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/api"
  4. "git.sxidc.com/go-tools/utils/http_client"
  5. )
  6. type Request interface {
  7. Request(c *api.Context, request *http_client.Request) (Request, error)
  8. Response() *http_client.Response
  9. }
  10. type PostRequest struct {
  11. Url string
  12. Body any
  13. headers map[string]string
  14. response *http_client.Response
  15. }
  16. func (req *PostRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
  17. preparedRequest, err := req.prepare(c)
  18. if err != nil {
  19. return nil, err
  20. }
  21. response, err := request.Post(preparedRequest.Url, preparedRequest.Body,
  22. http_client.WithRequestHeaders(preparedRequest.headers))
  23. if err != nil {
  24. return nil, err
  25. }
  26. preparedRequest.response = response
  27. return preparedRequest, nil
  28. }
  29. func (req *PostRequest) Response() *http_client.Response {
  30. return req.response
  31. }
  32. func (req *PostRequest) prepare(c *api.Context) (*PostRequest, error) {
  33. preparedRequest := &PostRequest{
  34. Url: req.Url,
  35. Body: req.Body,
  36. }
  37. // 赋值默认body
  38. if preparedRequest.Body == nil {
  39. cacheBody, err := c.GetBytesBody()
  40. if err != nil {
  41. return nil, err
  42. }
  43. preparedRequest.Body = cacheBody.Bytes()
  44. }
  45. // 赋值默认headers
  46. preparedRequest.headers = c.GetHeader().Map()
  47. return preparedRequest, nil
  48. }
  49. type DeleteRequest struct {
  50. Url string
  51. QueryParams map[string]string
  52. PathParams map[string]string
  53. headers map[string]string
  54. response *http_client.Response
  55. }
  56. func (req *DeleteRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
  57. preparedRequest, err := req.prepare(c)
  58. if err != nil {
  59. return nil, err
  60. }
  61. response, err := request.Delete(preparedRequest.Url,
  62. http_client.WithRequestQueryParams(preparedRequest.QueryParams),
  63. http_client.WithRequestPathParams(preparedRequest.PathParams),
  64. http_client.WithRequestHeaders(preparedRequest.headers))
  65. if err != nil {
  66. return nil, err
  67. }
  68. preparedRequest.response = response
  69. return preparedRequest, nil
  70. }
  71. func (req *DeleteRequest) Response() *http_client.Response {
  72. return req.response
  73. }
  74. func (req *DeleteRequest) prepare(c *api.Context) (*DeleteRequest, error) {
  75. preparedRequest := &DeleteRequest{
  76. Url: req.Url,
  77. QueryParams: req.QueryParams,
  78. PathParams: req.PathParams,
  79. }
  80. // 赋值默认查询参数
  81. if preparedRequest.QueryParams == nil || len(preparedRequest.QueryParams) == 0 {
  82. preparedRequest.QueryParams = c.GetQueryParams().Map()
  83. }
  84. // 赋值默认路径参数
  85. if preparedRequest.PathParams == nil || len(preparedRequest.PathParams) == 0 {
  86. preparedRequest.PathParams = c.GetPathParams().Map()
  87. }
  88. // 赋值默认headers
  89. preparedRequest.headers = c.GetHeader().Map()
  90. return preparedRequest, nil
  91. }
  92. type PutRequest struct {
  93. Url string
  94. Body any
  95. headers map[string]string
  96. response *http_client.Response
  97. }
  98. func (req *PutRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
  99. preparedRequest, err := req.prepare(c)
  100. if err != nil {
  101. return nil, err
  102. }
  103. response, err := request.Put(preparedRequest.Url, preparedRequest.Body,
  104. http_client.WithRequestHeaders(preparedRequest.headers))
  105. if err != nil {
  106. return nil, err
  107. }
  108. preparedRequest.response = response
  109. return preparedRequest, nil
  110. }
  111. func (req *PutRequest) Response() *http_client.Response {
  112. return req.response
  113. }
  114. func (req *PutRequest) prepare(c *api.Context) (*PutRequest, error) {
  115. preparedRequest := &PutRequest{
  116. Url: req.Url,
  117. Body: req.Body,
  118. }
  119. // 赋值默认body
  120. if preparedRequest.Body == nil {
  121. cacheBody, err := c.GetBytesBody()
  122. if err != nil {
  123. return nil, err
  124. }
  125. preparedRequest.Body = cacheBody.Bytes()
  126. }
  127. // 赋值默认headers
  128. preparedRequest.headers = c.GetHeader().Map()
  129. return preparedRequest, nil
  130. }
  131. type GetRequest struct {
  132. Url string
  133. QueryParams map[string]string
  134. PathParams map[string]string
  135. headers map[string]string
  136. response *http_client.Response
  137. }
  138. func (req *GetRequest) Request(c *api.Context, request *http_client.Request) (Request, error) {
  139. preparedRequest, err := req.prepare(c)
  140. if err != nil {
  141. return nil, err
  142. }
  143. response, err := request.Get(preparedRequest.Url,
  144. http_client.WithRequestQueryParams(preparedRequest.QueryParams),
  145. http_client.WithRequestPathParams(preparedRequest.PathParams),
  146. http_client.WithRequestHeaders(preparedRequest.headers))
  147. if err != nil {
  148. return nil, err
  149. }
  150. preparedRequest.response = response
  151. return preparedRequest, nil
  152. }
  153. func (req *GetRequest) Response() *http_client.Response {
  154. return req.response
  155. }
  156. func (req *GetRequest) prepare(c *api.Context) (*GetRequest, error) {
  157. preparedRequest := &GetRequest{
  158. Url: req.Url,
  159. QueryParams: req.QueryParams,
  160. PathParams: req.PathParams,
  161. }
  162. // 赋值默认查询参数
  163. if preparedRequest.QueryParams == nil || len(preparedRequest.QueryParams) == 0 {
  164. preparedRequest.QueryParams = c.GetQueryParams().Map()
  165. }
  166. // 赋值默认路径参数
  167. if preparedRequest.PathParams == nil || len(preparedRequest.PathParams) == 0 {
  168. preparedRequest.PathParams = c.GetPathParams().Map()
  169. }
  170. // 赋值默认headers
  171. preparedRequest.headers = c.GetHeader().Map()
  172. return preparedRequest, nil
  173. }