reqx

package module
v1.1.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2024 License: MIT Imports: 14 Imported by: 0

README

reqx

Golang http client

  • Light weight
  • Simple & Easy

Install

go get github.com/dreamph/reqx

Benchmark (reqx vs go http)

go test -bench . -benchmem -count 1

Benchmark_ReqxRequests/GET-12                      47740             22771 ns/op            1768 B/op         25 allocs/op
Benchmark_ReqxRequests/POST-12                     47290             24967 ns/op            1995 B/op         33 allocs/op
Benchmark_ReqxRequests/PUT-12                      47718             24997 ns/op            1991 B/op         33 allocs/op
Benchmark_ReqxRequests/PATCH-12                    47674             24923 ns/op            1992 B/op         33 allocs/op
Benchmark_ReqxRequests/DELETE-12                   47343             24903 ns/op            2004 B/op         33 allocs/op
Benchmark_GoHttpRequests/GET-12                    36661             31616 ns/op            5792 B/op         69 allocs/op
Benchmark_GoHttpRequests/POST-12                   34401             34127 ns/op            7456 B/op         88 allocs/op
Benchmark_GoHttpRequests/PUT-12                    34412             34492 ns/op            7389 B/op         88 allocs/op
Benchmark_GoHttpRequests/PATCH-12                  34220             34656 ns/op            7494 B/op         88 allocs/op
Benchmark_GoHttpRequests/DELETE-12                 34275             34700 ns/op            7473 B/op         88 allocs/op

Examples

package main

import (
	"bytes"
	"fmt"
	"github.com/dreamph/reqx"
	"log"
	"os"
	"time"
)

type Data struct {
	Name string `json:"name,omitempty"`
}

type Response struct {
	Origin string `json:"origin"`
}

func main() {
	clientWithBaseURL := reqx.New(
		reqx.WithBaseURL("https://httpbin.org"),
		reqx.WithTimeout(10*time.Second),
		reqx.WithHeaders(reqx.Headers{
			reqx.HeaderAuthorization: "Bearer 123456",
		}),
		reqx.WithOnBeforeRequest(func(req *reqx.RequestInfo) {
			fmt.Println(req.String())
		}),
		reqx.WithOnRequestCompleted(func(req *reqx.RequestInfo, resp *reqx.ResponseInfo) {
			fmt.Println(resp.String())
		}),
		reqx.WithOnRequestError(func(req *reqx.RequestInfo, resp *reqx.ResponseInfo) {
			fmt.Println(resp.String())
		}),
	)

	//POST
	result := &Response{}
	resp, err := clientWithBaseURL.Post(&reqx.Request{
		URL: "/post",
		Data: &Data{
			Name: "Reqx",
		},
		Headers: reqx.Headers{
			"custom": "1",
		},
		Result: result,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(result.Origin)

	client := reqx.New(
		reqx.WithTimeout(10*time.Second),
		reqx.WithHeaders(reqx.Headers{
			reqx.HeaderAuthorization: "Bearer 123456",
		}),
	)

	//Example Api Style
	result = &Response{}
	res, err := reqx.Post().
		URL("https://httpbin.org/post").
		Data(&Data{
			Name: "Reqx",
		}).
		Headers(reqx.Headers{}).
		Result(result).
		Send(client)
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(res.Headers)
	println(result.Origin)

	//POST
	result = &Response{}
	resp, err = client.Post(&reqx.Request{
		URL: "https://httpbin.org/post",
		Data: &Data{
			Name: "Reqx",
		},
		Headers: reqx.Headers{
			"custom": "1",
		},
		Result: result,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(result.Origin)

	//POST and get raw body
	var resultBytes []byte
	resp, err = client.Post(&reqx.Request{
		URL: "https://httpbin.org/post",
		Data: &Data{
			Name: "Reqx",
		},
		Result: &resultBytes,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(string(resultBytes))

	//POST with request timeout
	var resultBytes2 []byte
	resp, err = client.Post(&reqx.Request{
		URL: "https://httpbin.org/post",
		Data: &Data{
			Name: "Reqx",
		},
		Result:  &resultBytes2,
		Timeout: time.Second * 5,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(string(resultBytes2))

	//UPLOAD FILES
	test1Bytes, err := os.ReadFile("example/demo.txt")
	if err != nil {
		log.Fatalf(err.Error())
	}
	test2Bytes, err := os.ReadFile("example/demo.txt")
	if err != nil {
		log.Fatalf(err.Error())
	}
	var resultUploadBytes []byte
	resp, err = client.Post(&reqx.Request{
		URL: "https://httpbin.org/post",
		Data: &reqx.Form{
			FormData: reqx.FormData{
				"firstName": "reqx",
			},
			Files: reqx.WithFileParams(
				reqx.WithFileParam("file1", "test1.pdf", bytes.NewReader(test1Bytes)),
				reqx.WithFileParam("file2", "test2.pdf", bytes.NewReader(test2Bytes)),
			),
		},
		Result: &resultUploadBytes,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(string(resultUploadBytes))

	//GET
	result = &Response{}
	resp, err = client.Get(&reqx.Request{
		URL:    "https://httpbin.org/get",
		Result: result,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(result.Origin)

	//DELETE
	result = &Response{}
	resp, err = client.Delete(&reqx.Request{
		URL: "https://httpbin.org/delete",
		Data: &Data{
			Name: "Reqx",
		},
		Result: result,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(result.Origin)

	//PUT
	result = &Response{}
	resp, err = client.Put(&reqx.Request{
		URL: "https://httpbin.org/put",
		Data: &Data{
			Name: "Reqx",
		},
		Headers: reqx.Headers{
			"api-key": "123456",
		},
		Result: result,
	})
	if err != nil {
		log.Fatalf(err.Error())
	}
	println(resp.StatusCode)
	println(result.Origin)
}

Buy Me a Coffee

Documentation

Index

Constants

View Source
const (
	HeaderAuthorization = "Authorization"
	HeaderContentType   = "Content-Type"
)

Variables

View Source
var (
	HeaderContentTypeJson      = "application/json"
	HeaderContentTypeJsonBytes = []byte(HeaderContentTypeJson)

	HeaderContentTypeFormUrlEncoded      = "application/x-www-form-urlencoded"
	HeaderContentTypeFormUrlEncodedBytes = []byte(HeaderContentTypeFormUrlEncoded)
)

Functions

func WithFileParams

func WithFileParams(files ...FileParam) *[]FileParam

Types

type Client

type Client interface {
	Get(request *Request) (*Response, error)
	Post(request *Request) (*Response, error)
	Put(request *Request) (*Response, error)
	Delete(request *Request) (*Response, error)
	Patch(request *Request) (*Response, error)
	Head(request *Request) (*Response, error)
	Options(request *Request) (*Response, error)
}

func New

func New(opts ...ClientOptions) Client

func NewClient added in v1.1.4

func NewClient(opt *ClientOption) Client

type ClientOption added in v1.1.4

type ClientOption struct {
	Timeout            time.Duration
	BaseURL            string
	UserAgent          string
	TlsConfig          *tls.Config
	MaxConnsPerHost    int
	Headers            Headers
	MaxRedirectsCount  int
	OnBeforeRequest    OnBeforeRequest
	OnRequestCompleted OnRequestCompleted
	OnRequestError     OnRequestError
	JsonMarshal        func(v interface{}) ([]byte, error)
	JsonUnmarshal      func(data []byte, v interface{}) error
}

type ClientOptions

type ClientOptions func(opts *ClientOption)

func WithBaseURL

func WithBaseURL(baseURL string) ClientOptions

func WithHeaders

func WithHeaders(headers Headers) ClientOptions

func WithJsonMarshal

func WithJsonMarshal(jsonMarshal func(v interface{}) ([]byte, error)) ClientOptions

func WithJsonUnmarshal

func WithJsonUnmarshal(jsonUnmarshal func(data []byte, v interface{}) error) ClientOptions

func WithMaxConnsPerHost

func WithMaxConnsPerHost(maxConnsPerHost int) ClientOptions

func WithMaxRedirectsCount added in v1.1.8

func WithMaxRedirectsCount(maxRedirectsCount int) ClientOptions

func WithOnBeforeRequest

func WithOnBeforeRequest(onBeforeRequest OnBeforeRequest) ClientOptions

func WithOnRequestCompleted

func WithOnRequestCompleted(onRequestCompleted OnRequestCompleted) ClientOptions

func WithOnRequestError

func WithOnRequestError(onRequestError OnRequestError) ClientOptions

func WithTLSConfig

func WithTLSConfig(tlsConfig *tls.Config) ClientOptions

func WithTimeout

func WithTimeout(timeout time.Duration) ClientOptions

func WithUserAgent

func WithUserAgent(userAgent string) ClientOptions

type DeleteRequest added in v1.1.11

type DeleteRequest struct {
	// contains filtered or unexported fields
}

func Delete added in v1.1.11

func Delete() *DeleteRequest

func (*DeleteRequest) Context added in v1.1.11

func (r *DeleteRequest) Context(ctx context.Context) *DeleteRequest

func (*DeleteRequest) Data added in v1.1.11

func (r *DeleteRequest) Data(data any) *DeleteRequest

func (*DeleteRequest) ErrorResult added in v1.1.11

func (r *DeleteRequest) ErrorResult(errorResult any) *DeleteRequest

func (*DeleteRequest) Headers added in v1.1.11

func (r *DeleteRequest) Headers(headers Headers) *DeleteRequest

func (*DeleteRequest) Result added in v1.1.11

func (r *DeleteRequest) Result(result any) *DeleteRequest

func (*DeleteRequest) Send added in v1.1.11

func (r *DeleteRequest) Send(client Client) (*Response, error)

func (*DeleteRequest) Timeout added in v1.1.11

func (r *DeleteRequest) Timeout(timeout time.Duration) *DeleteRequest

func (*DeleteRequest) URL added in v1.1.11

func (r *DeleteRequest) URL(requestUrl string) *DeleteRequest

type FileParam

type FileParam struct {
	Name     string
	FileName string
	Reader   io.Reader
}

func WithFileParam

func WithFileParam(name string, fileName string, reader io.Reader) FileParam

type Form

type Form struct {
	FormData FormData
	Files    *[]FileParam
}

type FormData

type FormData map[string]string

type FormUrlEncoded

type FormUrlEncoded struct {
	Values *url.Values
}

type GetRequest added in v1.1.11

type GetRequest struct {
	// contains filtered or unexported fields
}

func Get added in v1.1.11

func Get() *GetRequest

func (*GetRequest) Context added in v1.1.11

func (r *GetRequest) Context(ctx context.Context) *GetRequest

func (*GetRequest) ErrorResult added in v1.1.11

func (r *GetRequest) ErrorResult(errorResult any) *GetRequest

func (*GetRequest) Headers added in v1.1.11

func (r *GetRequest) Headers(headers Headers) *GetRequest

func (*GetRequest) Result added in v1.1.11

func (r *GetRequest) Result(result any) *GetRequest

func (*GetRequest) Send added in v1.1.11

func (r *GetRequest) Send(client Client) (*Response, error)

func (*GetRequest) Timeout added in v1.1.11

func (r *GetRequest) Timeout(timeout time.Duration) *GetRequest

func (*GetRequest) URL added in v1.1.11

func (r *GetRequest) URL(requestUrl string) *GetRequest

type HeadRequest added in v1.1.11

type HeadRequest struct {
	// contains filtered or unexported fields
}
func Head() *HeadRequest

func (*HeadRequest) Context added in v1.1.11

func (r *HeadRequest) Context(ctx context.Context) *HeadRequest

func (*HeadRequest) Headers added in v1.1.11

func (r *HeadRequest) Headers(headers Headers) *HeadRequest

func (*HeadRequest) Send added in v1.1.11

func (r *HeadRequest) Send(client Client) (*Response, error)

func (*HeadRequest) URL added in v1.1.11

func (r *HeadRequest) URL(requestUrl string) *HeadRequest

type Headers

type Headers map[string]string

type OnBeforeRequest

type OnBeforeRequest func(req *RequestInfo)

type OnRequestCompleted

type OnRequestCompleted func(req *RequestInfo, resp *ResponseInfo)

type OnRequestError

type OnRequestError func(req *RequestInfo, resp *ResponseInfo)

type OptionsRequest added in v1.1.11

type OptionsRequest struct {
	// contains filtered or unexported fields
}

func Options added in v1.1.11

func Options() *OptionsRequest

func (*OptionsRequest) Context added in v1.1.11

func (r *OptionsRequest) Context(ctx context.Context) *OptionsRequest

func (*OptionsRequest) Data added in v1.1.11

func (r *OptionsRequest) Data(data any) *OptionsRequest

func (*OptionsRequest) ErrorResult added in v1.1.11

func (r *OptionsRequest) ErrorResult(errorResult any) *OptionsRequest

func (*OptionsRequest) Headers added in v1.1.11

func (r *OptionsRequest) Headers(headers Headers) *OptionsRequest

func (*OptionsRequest) Result added in v1.1.11

func (r *OptionsRequest) Result(result any) *OptionsRequest

func (*OptionsRequest) Send added in v1.1.11

func (r *OptionsRequest) Send(client Client) (*Response, error)

func (*OptionsRequest) Timeout added in v1.1.11

func (r *OptionsRequest) Timeout(timeout time.Duration) *OptionsRequest

func (*OptionsRequest) URL added in v1.1.11

func (r *OptionsRequest) URL(requestUrl string) *OptionsRequest

type PatchRequest added in v1.1.11

type PatchRequest struct {
	// contains filtered or unexported fields
}

func Patch added in v1.1.11

func Patch() *PatchRequest

func (*PatchRequest) Context added in v1.1.11

func (r *PatchRequest) Context(ctx context.Context) *PatchRequest

func (*PatchRequest) Data added in v1.1.11

func (r *PatchRequest) Data(data any) *PatchRequest

func (*PatchRequest) ErrorResult added in v1.1.11

func (r *PatchRequest) ErrorResult(errorResult any) *PatchRequest

func (*PatchRequest) Headers added in v1.1.11

func (r *PatchRequest) Headers(headers Headers) *PatchRequest

func (*PatchRequest) Result added in v1.1.11

func (r *PatchRequest) Result(result any) *PatchRequest

func (*PatchRequest) Send added in v1.1.11

func (r *PatchRequest) Send(client Client) (*Response, error)

func (*PatchRequest) Timeout added in v1.1.11

func (r *PatchRequest) Timeout(timeout time.Duration) *PatchRequest

func (*PatchRequest) URL added in v1.1.11

func (r *PatchRequest) URL(requestUrl string) *PatchRequest

type PostRequest added in v1.1.11

type PostRequest struct {
	// contains filtered or unexported fields
}

func Post added in v1.1.11

func Post() *PostRequest

func (*PostRequest) Context added in v1.1.11

func (r *PostRequest) Context(ctx context.Context) *PostRequest

func (*PostRequest) Data added in v1.1.11

func (r *PostRequest) Data(data any) *PostRequest

func (*PostRequest) ErrorResult added in v1.1.11

func (r *PostRequest) ErrorResult(errorResult any) *PostRequest

func (*PostRequest) Headers added in v1.1.11

func (r *PostRequest) Headers(headers Headers) *PostRequest

func (*PostRequest) Result added in v1.1.11

func (r *PostRequest) Result(result any) *PostRequest

func (*PostRequest) Send added in v1.1.11

func (r *PostRequest) Send(client Client) (*Response, error)

func (*PostRequest) Timeout added in v1.1.11

func (r *PostRequest) Timeout(timeout time.Duration) *PostRequest

func (*PostRequest) URL added in v1.1.11

func (r *PostRequest) URL(requestUrl string) *PostRequest

type PutRequest added in v1.1.11

type PutRequest struct {
	// contains filtered or unexported fields
}

func Put added in v1.1.11

func Put() *PutRequest

func (*PutRequest) Context added in v1.1.11

func (r *PutRequest) Context(ctx context.Context) *PutRequest

func (*PutRequest) Data added in v1.1.11

func (r *PutRequest) Data(data any) *PutRequest

func (*PutRequest) ErrorResult added in v1.1.11

func (r *PutRequest) ErrorResult(errorResult any) *PutRequest

func (*PutRequest) Headers added in v1.1.11

func (r *PutRequest) Headers(headers Headers) *PutRequest

func (*PutRequest) Result added in v1.1.11

func (r *PutRequest) Result(result any) *PutRequest

func (*PutRequest) Send added in v1.1.11

func (r *PutRequest) Send(client Client) (*Response, error)

func (*PutRequest) Timeout added in v1.1.11

func (r *PutRequest) Timeout(timeout time.Duration) *PutRequest

func (*PutRequest) URL added in v1.1.11

func (r *PutRequest) URL(requestUrl string) *PutRequest

type Raw

type Raw struct {
	Body []byte
}

type Request

type Request struct {
	Context                context.Context
	URL                    string
	Data                   interface{}
	Headers                Headers
	Result                 interface{}
	ErrorResult            interface{}
	Timeout                time.Duration
	ResultSuccessCheckFunc func(statusCode int) bool
}

type RequestInfo

type RequestInfo struct {
	*fasthttp.Request
	Context context.Context
}

type Response

type Response struct {
	StatusCode int
	Headers    Headers
	TotalTime  time.Duration
}

type ResponseInfo

type ResponseInfo struct {
	*fasthttp.Response
	Context   context.Context
	TotalTime time.Duration
	Err       error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL