ProductPromotion
Logo

Go.Lang

made by https://0x3d.site

GitHub - opus-domini/fast-shot: Hit your API targets with rapid-fire precision using Go's fastest and simple HTTP Client.
Hit your API targets with rapid-fire precision using Go's fastest and simple HTTP Client. - opus-domini/fast-shot
Visit Site

GitHub - opus-domini/fast-shot: Hit your API targets with rapid-fire precision using Go's fastest and simple HTTP Client.

GitHub - opus-domini/fast-shot: Hit your API targets with rapid-fire precision using Go's fastest and simple HTTP Client.

Fast Shot is a robust, feature-rich, and highly configurable HTTP client for Go. Crafted with modern Go practices in mind, it offers a fluent, chainable API that allows for clean, idiomatic code.

Table of Contents

Why Fast Shot?

  • Fluent & Chainable API: Write expressive, readable, and flexible HTTP client code.
  • Ease of Use: Reduce boilerplate, making HTTP requests as straightforward as possible.
  • Rich Features: From headers to query parameters and JSON support, Fast Shot covers your needs.
  • Advanced Retry Mechanism: Built-in support for retries with various backoff strategies.

Features 🌟

  • Fluent and chainable API for clean, expressive code
  • Comprehensive HTTP method support (GET, POST, PUT, DELETE, etc.)
  • Flexible authentication options (Bearer Token, Basic Auth, Custom)
  • Easy manipulation of headers, cookies, and query parameters
  • Advanced retry mechanism with customizable backoff strategies
  • Client-side load balancing for improved reliability
  • JSON request and response support
  • Timeout and redirect control
  • Proxy support
  • Extensible and customizable for specific needs
  • Well-tested and production-ready

Installation 🔧

To install Fast Shot, run the following command:

go get github.com/opus-domini/fast-shot

Quick Start 🚀

Here's how you can make a simple POST using Fast Shot:

package main

import (
    "fmt"
    fastshot "github.com/opus-domini/fast-shot"
    "github.com/opus-domini/fast-shot/constant/mime"
)

func main() {
    client := fastshot.NewClient("https://api.example.com").
        Auth().BearerToken("your_token_here").
        Build()

    payload := map[string]interface{}{
        "key1": "value1",
        "key2": "value2",
    }

    response, err := client.POST("/endpoint").
        Header().AddAccept(mime.JSON).
        Body().AsJSON(payload).
        Send()

    // Check for request send problems.
    if err != nil {
        panic(err) // (¬_¬")
    }

    // Check for (4xx || 5xx) errors response.
    if response.Status().IsError() {
        panic(response.Body().AsString()) // ¯\_(ツ)_/¯
    }
	
    var result map[string]interface{}
    _ := response.Body().AsJSON(&result)

    // Congrats! Do something awesome with the result (¬‿¬)
}

Advanced Usage 🤖

Fluent API

Easily chain multiple settings in a single line:

client := fastshot.NewClient("https://api.example.com").
    Auth().BearerToken("your-bearer-token").
    Header().Add("My-Header", "My-Value").
    Config().SetTimeout(30 * time.Second).
    Build()

Advanced Retry Mechanism

Handle transient failures with customizable backoff strategies:

client.POST("/resource").
    Retry().SetExponentialBackoff(2 * time.Second, 5, 2.0).
    Send()

This new retry feature supports:

  • Constant backoff
  • Exponential backoff
  • Full jitter for both constant and exponential backoff
  • Custom retry conditions
  • Maximum delay setting

Out-of-the-Box Support for Client Load Balancing

Effortlessly manage multiple endpoints:

client := fastshot.NewClientLoadBalancer([]string{
    "https://api1.example.com",
    "https://api2.example.com",
    "https://api3.example.com",
    }).
    Config().SetTimeout(time.Second * 10).
    Build()

This feature allows you to distribute network traffic across several servers, enhancing the performance and reliability of your applications.

Authentication

Fast Shot supports various types of authentication:

// Bearer Token
builder.Auth().BearerToken("your-bearer-token")

// Basic Authentication
builder.Auth().BasicAuth("username", "password")

// Custom Authentication
builder.Auth().Set("custom-authentication-header")

Custom Headers and Cookies

Add your own headers and cookies effortlessly:

// Add Custom Header
builder.Header().
    Add("header", "value")

// Add Multiple Custom Headers
builder.Header().
    AddAll(map[string]string{
        "key1": "value1",
        "key2": "value2",
        "key3": "value3",
    })

// Add Custom Cookie
builder.Cookie().
    Add(&http.Cookie{Name: "session_id", Value: "id"})

Advanced Configurations

Control every aspect of the HTTP client:

// Set Timeout
builder.Config().
    SetTimeout(time.Second * 30)

// Set Follow Redirect
builder.Config().
    SetFollowRedirects(false)

// Set Custom Transport
builder.Config().
    SetCustomTransport(myCustomTransport)

// Set Proxy
builder.Config().
    SetProxy("http://my-proxy-server:port")

Response Handling

Extract information from the response with ease:

// Fluent response status check
response.Status()

// Easy response body access and conversion
response.Body()

// Get response headers to inspect
response.Header()

// Get response cookies for further processing 
response.Cookie()

// Get raw response if needed
response.Raw()

// and more...

Contributing 🤝

We welcome contributions to Fast Shot! Here's how you can contribute:

  1. Fork the repository
  2. Create a new branch for your feature or bug fix
  3. Write your code and tests
  4. Ensure all tests pass
  5. Submit a pull request

Please make sure to update tests as appropriate and adhere to the existing coding style.

For more detailed information, check out our CONTRIBUTING.md file.

Stargazers over time ⭐

Stargazers over time

Articles
to learn more about the golang concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about GoLang.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory