Go Language

Building a RESTful API with Go and HTTP Router


Introduction

Building a RESTful API in Go is a common task for creating web services that interact with various clients. In this guide, we'll explore how to create a RESTful API using Go and an HTTP router, provide an overview of RESTful principles, and offer sample code to demonstrate the process.

What Is a RESTful API?

A RESTful API is an architectural style for designing networked applications that use HTTP for communication. Key principles of REST include:

  • **Stateless**: Each request from a client to a server must contain all the information needed to understand and fulfill the request.
  • **Resources**: Resources are identified by URLs and can represent entities such as users, products, or data records.
  • **HTTP Verbs**: RESTful APIs use HTTP verbs like GET, POST, PUT, DELETE to perform CRUD (Create, Read, Update, Delete) operations.
  • **Response**: Responses include status codes and data in a format like JSON or XML.

Creating a RESTful API in Go

To create a RESTful API in Go, you'll need an HTTP router to handle incoming requests and route them to the appropriate handlers. A popular choice for an HTTP router is the `gorilla/mux` package. Here's an example of creating a simple RESTful API with Go and `gorilla/mux`:

                            package main
                import (
                    `encoding/json`
                    `net/http`
                    `github.com/gorilla/mux`
                )
                type Item struct {
                    ID   string `json:`id``
                    Name string `json:`name``
                }
                var items = []Item{
                    {ID: `1`, Name: `Item 1`},
                    {ID: `2`, Name: `Item 2`},
                }
                func GetItems(w http.ResponseWriter, r *http.Request) {
                    w.Header().Set(`Content-Type`, `application/json`)
                    json.NewEncoder(w).Encode(items)
                }
                func main() {
                    router := mux.NewRouter()
                    router.HandleFunc(`/items`, GetItems).Methods(`GET`)
                    http.Handle(`/`, router)
                    http.ListenAndServe(`:8080`, nil)
                }
                    

In this code, we create a simple RESTful API that responds to a GET request at the `/items` endpoint. It returns a list of items in JSON format.

Further Resources

To continue learning about building RESTful APIs with Go, consider these resources:

Written by Surfside Media

Senior Full Stack Developer specializing in Web Technologies.