Popularity
5.5
Growing
Activity
8.3
-
303
4
21

Programming language: Go
License: MIT License
Tags: Forms    

httpin alternatives and similar packages

Based on the "Forms" category.
Alternatively, view httpin alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of httpin or a related project?

Add another 'Forms' Package

README

httpin - HTTP Input for Go

Decode an HTTP request into a custom struct

Go documentation codecov Go Report Card Mentioned in Awesome Go Go Reference

Documentation

Core Features

httpin helps you easily decoding HTTP request data from

  • Query parameters, e.g. ?name=john&is_member=true
  • Headers, e.g. Authorization: xxx
  • Form data, e.g. username=john&password=******
  • JSON/XML Body, e.g. POST {"name":"john"}
  • Path variables, e.g. /users/{username}
  • File uploads

You only need to define a struct to receive/bind data from an HTTP request, without writing any parsing stuff code by yourself.

How to use?

type ListUsersInput struct {
    Page     int  `in:"query=page"`
    PerPage  int  `in:"query=per_page"`
    IsMember bool `in:"query=is_member"`
}

func ListUsers(rw http.ResponseWriter, r *http.Request) {
    input := r.Context().Value(httpin.Input).(*ListUsersInput)

    if input.IsMember {
        // Do sth.
    }
    // Do sth.
}

httpin is:

Why this package?

Compared with using net/http package
func ListUsers(rw http.ResponseWriter, r *http.Request) {
    page, err := strconv.ParseInt(r.FormValue("page"), 10, 64)
    if err != nil {
        // Invalid parameter: page.
        return
    }
    perPage, err := strconv.ParseInt(r.FormValue("per_page"), 10, 64)
    if err != nil {
        // Invalid parameter: per_page.
        return
    }
    isMember, err := strconv.ParseBool(r.FormValue("is_member"))
    if err != nil {
        // Invalid parameter: is_member.
        return
    }

    // Do sth.
}
Benefits Before (use net/http package) After (use ggicci/httpin package)
⌛️ Developer Time 😫 Expensive (too much parsing stuff code) 🚀 Faster (define the struct for receiving input data and leave the parsing job to httpin)
♻️ Code Repetition Rate 😞 High 😍 Lower
📖 Code Readability 😟 Poor 🤩 Highly readable
🔨 Maintainability 😡 Poor 🥰 Highly maintainable

Alternatives