Maison > développement back-end > Golang > le corps du texte

Créer une API REST simple avec Go

Susan Sarandon
Libérer: 2024-10-31 22:06:44
original
554 Les gens l'ont consulté

Building a simple REST API with Go

Go est un excellent langage pour la programmation système, mais il brille également sur le Web, notamment lors de la création d'API REST. Ce guide explique la création d'une API REST simple à l'aide de la bibliothèque standard de Go. Nous allons créer une API pour gérer une liste de serveurs, nous permettant d'ajouter, de supprimer et d'afficher les enregistrements du serveur. Nous allons également utiliser les nouvelles améliorations du routeur Go 1.22 pour la correspondance des méthodes, ce qui nous permet d'avoir des itinéraires et des gestionnaires plus propres.

Ce guide suppose que vous avez une compréhension de base de Go et qu'il est installé sur votre ordinateur.

Configuration

Créez un nouveau répertoire pour votre projet et initialisez un module Go :

mkdir server-api
cd server-api
go mod init server-api
Copier après la connexion

Le code

Créez un fichier appelé main.go. Nous utiliserons le package http standard de Go - il contient tout ce dont nous avons besoin pour une API de base.

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)
Copier après la connexion

Tout d'abord, définissons à quoi ressemble un serveur. Nous allons garder les choses simples : juste un identifiant, un nom, une adresse IP et une région :

type Server struct {
    ID     string `json:"id"`
    Name   string `json:"name"`
    IP     string `json:"ip"`
    Region string `json:"region`
}
Copier après la connexion

Nous stockerons nos serveurs en mémoire à l'aide d'une tranche. Dans une application réelle, vous utiliseriez probablement une base de données :

var servers = []Server{
    {ID: "srv1", Name: "prod-1", IP: "10.0.1.1", Region: "us-east"},
    {ID: "srv2", Name: "prod-2", IP: "10.0.1.2", Region: "eu-west"},
}
Copier après la connexion

Création du routeur

Ensuite, nous configurerons nos itinéraires. Go 1.22 a introduit une nouvelle syntaxe de routage qui rend cela assez simple :

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("GET /servers", listServers)
    mux.HandleFunc("GET /servers/{id}", showServer)
    mux.HandleFunc("POST /servers", createServer)
    mux.HandleFunc("DELETE /servers/{id}", deleteServer)

    fmt.Println("Server starting on port 8080...")
    log.Fatal(http.ListenAndServe(":8080", mux))
}
Copier après la connexion

Gestionnaires

Implémentons maintenant chaque gestionnaire. Tout d'abord, lister tous les serveurs :

func listServers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(servers)
}
Copier après la connexion

Obtenir un seul serveur par ID :

func showServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    id := r.PathValue("id")

    for _, server := range servers {
        if server.ID == id {
            json.NewEncoder(w).Encode(server)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
Copier après la connexion

Création d'un nouveau serveur :

func createServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    var server Server
    if err := json.NewDecoder(r.Body).Decode(&server); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    servers = append(servers, server)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(server)
}
Copier après la connexion

Et enfin, supprimer un serveur :

func deleteServer(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")

    for i, server := range servers {
        if server.ID == id {
            servers = append(servers[:i], servers[i+1:]...)
            w.WriteHeader(http.StatusNoContent)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
Copier après la connexion

Utiliser l'API

Une fois le code en place, exécutez-le :

go run main.go
Copier après la connexion

Voici comment interagir avec chaque point de terminaison à l'aide de cURL :

Liste de tous les serveurs :

curl localhost:8080/servers
Copier après la connexion

Obtenir un serveur spécifique :

curl localhost:8080/servers/srv1
Copier après la connexion

Ajouter un serveur :

curl -X POST localhost:8080/servers   -H "Content-Type: application/json";   -d '{"id":"srv3","name":"prod-3","ip":"10.0.1.3","region":"ap-south"}';
Copier après la connexion

Supprimer un serveur :

curl -X DELETE localhost:8080/servers/srv1
Copier après la connexion

Quelle est la prochaine étape ?

Il s'agit d'une API de base, mais vous pouvez en ajouter beaucoup :

  • Validation des entrées
  • Gestion appropriée des erreurs
  • Serveurs persistants avec une base de données telle que PostgreSQL
  • Authentification
  • Demande de journalisation
  • Tests unitaires

La bibliothèque standard est étonnamment capable de créer des API. Bien qu'il existe des frameworks plus complets disponibles, commencer par la bibliothèque standard vous aide à comprendre les bases sans qu'aucune magie ne se produise en coulisses.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!