Skip to content

restyvstyphoeus

MIT 64 1 9,116
58.1 thousand (month) Aug 25 2018 v2.11.0(3 months ago)
4,057 15 142 MIT
1.4.1(4 months ago) Oct 06 2009 946.7 thousand (month)

Resty is an HTTP and REST client library for Go. It is designed to be simple and easy to use, while still providing a lot of powerful features. One of the main benefits of using Resty is that it allows you to make HTTP requests with minimal boilerplate code, while still providing a lot of flexibility and control over the requests.

One of the key features of Resty is its use of chaining. This allows you to chain together multiple methods to build up a request, making the code more readable and easy to understand. For example, you can chain together the R().SetHeader("Accept", "application/json") method to set the Accept header and R().SetQueryParam("param1", "value1") to add a query parameter to the request.

Resty also provides a lot of convenience functions for making common types of requests, such as Get, Post, Put, and Delete. This can be useful if you need to make a simple request quickly and don't want to spend a lot of time configuring the request. Additionally, Resty also provides a way to set a timeout for the request, in case the server takes too long to respond.

Resty also supports HTTP/2 and advanced features like multipart file upload, request and response middlewares, request hooks, and many others.

Overall, Resty is a good choice if you're looking for a simple and easy-to-use HTTP client library for Go. It's a good fit for projects that don't require a lot of customization and need a quick way to make HTTP requests.

Typhoeus is a Ruby library that allows you to make parallel HTTP requests, which can greatly speed up the process of making multiple requests to different servers. It is built on top of the C library libcurl, which is known for its high performance and reliability.

One of the main features of Typhoeus is its ability to make parallel requests. This means that it can send multiple requests at the same time, and wait for all of them to finish before returning the results. This can greatly reduce the time it takes to make multiple requests, as it eliminates the need to wait for each request to complete before sending the next one.

In addition to its parallelism feature, Typhoeus also provides a convenient and easy-to-use Ruby interface for making HTTP requests. It supports all of the common HTTP methods (GET, POST, PUT, DELETE, etc.) and allows you to set various request options, such as headers, timeouts, and authentication. It also supports streaming responses, which allows you to process large responses piece by piece, rather than loading the entire response into memory at once.

Typhoeus is also supports HTTP/2 protocol which provides faster load times and reduced network usage. It also supports streaming which is an essential feature for large data transfer.

Typhoeus is well-documented, actively maintained, and has a large and active community of users. It is widely used in the Ruby ecosystem and is a popular choice for building high-performance web scraping and data-gathering applications.

Note that Typhoeus can also be used as an adapter in popular alternative package Faraday.

Highlights


http2asyncuses-curl

Example Use


package main

// establish session client
client := resty.New()
// set proxy for the session
client.SetProxy("http://proxyserver:8888")
// set retries
client.
    // Set retry count to non zero to enable retries
    SetRetryCount(3).
    // You can override initial retry wait time.
    // Default is 100 milliseconds.
    SetRetryWaitTime(5 * time.Second).
    // MaxWaitTime can be overridden as well.
    // Default is 2 seconds.
    SetRetryMaxWaitTime(20 * time.Second).
    // SetRetryAfter sets callback to calculate wait time between retries.
    // Default (nil) implies exponential backoff with jitter
    SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
        return 0, errors.New("quota exceeded")
    })

// Make GET request
resp, err := client.R().
    // we can set query
    SetQueryParams(map[string]string{
        "query": "foo",
    }).
    // and headers
    SetHeader("Accept", "application/json").
    Get("https://httpbin.org/get")

// Make Post request
resp, err := client.R().
    // JSON data
    SetHeader("Content-Type", "application/json").
    SetBody(`{"username":"testuser", "password":"testpass"}`).
    // or Form Data
    SetFormData(map[string]string{
      "username": "jeeva",
      "password": "mypass",
    }).
    Post("https://httpbin.org/post")

// resty also support request and response middlewares
// which allow easy modification of outgoing requests and incoming responses
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Now you have access to Client and current Request object
    // manipulate it as per your need

    return nil  // if its success otherwise return error
  })

// Registering Response Middleware
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Now you have access to Client and current Response object
    // manipulate it as per your need

    return nil  // if its success otherwise return error
  })
# GET request
Typhoeus.get("www.example.com")
# POST request
Typhoeus.post("www.example.com/posts", body: { title: "test post", content: "this is my test"})

# make parallel requests:
# hydra is a request queue manager
hydra = Typhoeus::Hydra.hydra
# create request object
first_request = Typhoeus::Request.new("http://example.com/posts/1")
# add complete callbacks
first_request.on_complete do |response|
  # callbacks can queue new requests
  third_url = response.body
  third_request = Typhoeus::Request.new(third_url)
  hydra.queue third_request
end
second_request = Typhoeus::Request.new("http://example.com/posts/2")
# queue requests:
hydra.queue first_request
hydra.queue second_request

hydra.run # this is a blocking call that returns once all requests are complete

Alternatives / Similar