HTTPin: The Future of HTTP Request Handling

HTTPin - HTTP Input for Go

Decode an HTTP request into a custom struct

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 {
    Token    string `in:"query=access_token;header=x-access-token"`
    Page     int    `in:"query=page;default=1"`
    PerPage  int    `in:"query=per_page;default=20"`
    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.
}
BenefitsBefore (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 and Similars

 
Documentation

Download Details:

Author: ggicci
Source Code: https://github.com/ggicci/httpin 
License: MIT license

#go #golang #http #api

HTTPin: The Future of HTTP Request Handling
1.45 GEEK