Skip to content

pzentenoe/httpclient-call-go

Repository files navigation

httpclient-call-go

Overview

The httpclient-call-go library simplifies making HTTP calls to various API services efficiently and straightforwardly. It is designed to seamlessly integrate into any Go project requiring HTTP API interactions.

CI Go Report Card License GitHub issues Quality Gate Coverage Bugs

Buy Me a Coffee

Buy Me A Coffee

Thank you for your support! ❤️

Features

  • Easy HTTP client configuration.
  • Full support for customizing HTTP requests (headers, body, timeouts).
  • Convenient methods for making HTTP calls and deserializing JSON responses.

Installation

To use httpclient-call-go in your project, install it using the following Go command:

go get github.com/pzentenoe/httpclient-call-go

Quick Start

Setting Up HTTP Client

First, import the library and create a new instance of HTTPClientCall specifying the base URL of the API service and an HTTP client:

import (
    "net/http"
    client "github.com/pzentenoe/httpclient-call-go"
)

httpClientCall := client.NewHTTPClientCall("https://dummyhost.cl", &http.Client{})

Making an HTTP Call

Using Do Implementation

To perform a simple POST request and handle the response as []byte:

package main

import (
	"context"
	"fmt"
	"io"
	"net/http"
	"time"
	client "github.com/pzentenoe/httpclient-call-go"
)

func main() {
	httpClientCall := client.NewHTTPClientCall("https://dummyhost.cl", &http.Client{})
	headers := http.Header{
		client.HeaderContentType: []string{client.MIMEApplicationJSON},
	}
	dummyBody := map[string]interface{}{"age": 30, "name": "test"}

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	response, err := httpClientCall.
		Method(http.MethodPost).
		Path("/path").
		Body(dummyBody).
		Headers(headers).
		Do(ctx)
	if err != nil {
		fmt.Println("Error calling the API:", err)
		return
	}
	defer response.Body.Close()

	dataBytes, errToRead := io.ReadAll(response.Body)
	if errToRead != nil {
		fmt.Println("Error reading data:", errToRead)
		return
	}
	fmt.Println(string(dataBytes))
}

Using DoWithUnmarshal Implementation

To perform a POST request and automatically deserialize the JSON response into a Go structure:

package main

import (
	"context"
	"fmt"
	"net/http"
	"time"

	client "github.com/pzentenoe/httpclient-call-go"
)

type someBodyResponse struct {
	Name string `json:"name"`
}

func main() {
	httpClientCall := client.NewHTTPClientCall("https://dummyhost.cl", &http.Client{})
	headers := http.Header{
		client.HeaderContentType: []string{client.MIMEApplicationJSON},
	}
	dummyBody := map[string]interface{}{"age": 30, "name": "test"}

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	var responseBody someBodyResponse
	resp, err := httpClientCall.
		Method(http.MethodPost).
		Path("/path").
		Body(dummyBody).
		Headers(headers).
		DoWithUnmarshal(ctx, &responseBody)
	if err != nil {
		fmt.Println("Error calling the API:", err)
		return
	}
	fmt.Println("Status Code:", resp.StatusCode)
	fmt.Println("Name in Response:", responseBody.Name)
}

Testing

Execute the tests with:

go test ./...

Contributing

We welcome contributions! Please fork the project and submit pull requests to the main branch. Make sure to add tests for new functionalities and document any significant changes.

License

This project is released under the MIT License. See the LICENSE file for more details.

Changelog

For a detailed changelog, refer to CHANGELOG.md.

Author

  • Pablo Zenteno - Full Stack Developer - pzentenoe

About

Http client call for golang http api calls

Resources

License

Stars

Watchers

Forks

Packages