Response Bodies
Response body parsers can be provided as request options. httpr comes with built-in helpers for parsing JSON, string, and byte slice response bodies.
JSON
JSON response bodies can be handled using the ResponseBodyJSON helper function. This function allows you to specify separate structs for successful and error responses.
httpc := httpr.NewClient()
type SuccessResponse struct { UserID int `json:"userId"` ID int `json:"id"` Title string `json:"title"` Body string `json:"body"`}
type ErrorResponse struct { Message string `json:"message"` Code optional.Option[int] `json:"code"` Field optional.Option[string] `json:"field"`}
var successBody SuccessResponsevar errBody ErrorResponse
resp, err := httpc.Get( context.Background(), "https://api.example.com/posts/1", httpr.ResponseBodyJSON(&successBody, &errBody),)
if err != nil { // Handle error}
if resp.StatusCode >= 400 { // Handle error response using errBody} else { // Process successful response using successBody}String
String response bodies can be handled using the ResponseBodyString helper function.
httpc := httpr.NewClient()
var responseBody string
resp, err := httpc.Get( context.Background(), "https://api.example.com/text", httpr.ResponseBodyString(&responseBody),)
if err != nil { // Handle error}
fmt.Println("Response:", responseBody)Bytes
Byte slice response bodies can be handled using the ResponseBodyBytes helper function.
httpc := httpr.NewClient()
var responseBody []byte
resp, err := httpc.Get( context.Background(), "https://api.example.com/binary", httpr.ResponseBodyBytes(&responseBody),)
if err != nil { // Handle error}
// Process the byte slice responseBodyCustom Response Body Handler
You can create a custom response body handler using the ResponseBody function.
httpc := httpr.NewClient()
customHandler := httpr.ResponseBody(func(resp *http.Response) error { // Your custom logic here // Read the response body, process it, etc. return nil})
resp, err := httpc.Get( context.Background(), "https://api.example.com/custom", customHandler,)
if err != nil { // Handle error}