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: