Go est un excellent langage pour créer des serveurs web et des services web simples mais efficaces. Il fournit un package HTTP intégré qui contient des utilitaires pour créer rapidement un serveur web ou de fichiers.
le but de ce tutoriel est de créer un serveur web capable d’accepter une requête GET et de servir une réponse. Nous utiliserons le serveur pour servir des fichiers statiques, agissant comme un serveur de fichiers. Nous ferons ensuite en sorte que le serveur web réponde à une demande POST provenant d’une soumission de formulaire, tel qu’un formulaire de contact.,
sans plus tarder, explorons comment construire votre premier serveur web avec Go.
Setup
Vous aurez besoin de Go version 1.11 ou supérieure pour suivre ce tutoriel.
dans cette section, nous allons créer tous les fichiers nécessaires et établir la structure de fichiers correcte. Après cela, nous importerons nos paquets pour tester si la configuration fonctionne. Ne vous inquiétez pas-la configuration est très basique pour le serveur web Golang.
créez les fichiers et dossiers suivants selon la structure ci-dessous., Le fichier server.go
se trouve à la racine de votre projet, tout comme la balise static
dossier, qui contient deux fichiers HTML: index.html
et form.html
.
- server.go- static/- - index.html- - form.html
Maintenant, nous allons écrire le code. Ouvrez le fichierserver.go
et importez les paquets requis. Nous utiliserons fmt
pour imprimer des données utiles sur le terminal et log
pour imprimer des erreurs fatales en cas de panne du serveur web.
Le net/http
le plus important est l’emballage., Il fournit toutes les fonctionnalités pour créer une implémentation client ou serveur HTTP telle qu’un serveur web Golang.
package mainimport ( "fmt" "log" "net/http")
Enfin, nous allons ajouter un simple main()
fonction dans le server.go
fichier qui imprime un message au terminal.
func main() { fmt.Printf("Starting server at port 8080\n")}
Pour tester la configuration, démarrez le fictif serveur avec la commande suivante.
go run server.go
Si vous avez suivi la configuration, vous devriez voir la sortie suivante dans votre terminal.,
Starting server at port 8080
Si tout semble bon, la prochaine étape est de créer un serveur web.
démarrage d’un serveur Web avec des routes GET
à ce stade, nous allons créer un serveur web qui est réellement servi sur le port 8080 et peut répondre aux demandes GET entrantes.
modifions le code dans notre fonctionmain()
pour démarrer un serveur web sur le port 8080. La méthodeListenAndServe
est exportée par le paquethttp
que nous avons importé pendant la première étape. Cette méthode nous permet de démarrer le serveur web et de spécifier le port pour écouter les demandes entrantes.,
notez que le paramètre port doit être passé sous la forme d’une chaîne précédée de deux points. Le deuxième paramètre accepte un gestionnaire pour configurer le serveur pour HTTP / 2. Cependant, ce n’est pas important pour ce tutoriel, nous pouvons donc passer en toute sécurité nil
comme deuxième argument.
func main() { fmt.Printf("Starting server at port 8080\n") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }}
À ce stade, le serveur peut démarrer, mais il ne sait toujours pas comment gérer les demandes. Nous devons transmettre des gestionnaires au serveur afin qu’il sache comment répondre aux demandes entrantes et quelles demandes accepter.,
nous allons utiliser la fonctionHandleFunc
pour ajouter des gestionnaires de route au serveur web. Le premier argument accepte le chemin dont il a besoin pour écouter /hello
. Ici, vous dites au serveur d’écouter toutes les demandes entrantes pour . Le deuxième argument accepte une fonction qui détient la logique métier pour répondre correctement à la demande.
par défaut, cette fonction accepte un objetResponseWriter
pour renvoyer une réponse et un objetRequest
qui fournit plus d’informations sur la requête elle-même., Par exemple, vous pouvez accéder aux informations sur les en-têtes envoyés, ce qui peut être utile pour authentifier la demande.
comme vous pouvez le voir, le gestionnaire envoie un message"Hello!”
lorsque nous transmettons cette réponse auResponseWriter
.
essayons maintenant cette configuration. Démarrer le serveur web avec la balise go run server.go
et visiter . Si le serveur répond avec
"Hello!"
, vous pouvez passer à l’étape suivante, où vous apprendrez à ajouter une sécurité de base à vos routes de serveur web Golang.,
ajouter une sécurité de base aux routes
Il va sans dire que la sécurité est importante. Examinons quelques stratégies de base pour améliorer la sécurité de votre serveur web.
avant de le faire, nous devrions prendre un moment pour augmenter la lisibilité de notre code. Créons la fonction helloHandler
, qui contient toute la logique liée à la requête /hello
.
ce gestionnaire utilise l’objetRequest
pour vérifier si le chemin demandé est correct. Ceci est un exemple très basique de la façon dont vous pouvez utiliser l’objet Request
.,
Si le chemin est incorrect, le serveur renvoie une erreurStatusNotFound
à l’utilisateur. Pour écrire une erreur à l’utilisateur, vous pouvez utiliser la méthode http.Error
. Notez que le code StatusNotFound
correspond à une erreur 404. Tous les codes d’état se trouvent dans la documentation Golang.
ensuite, nous ajoutons une vérification pour vérifier le type de la demande. Si la méthode ne correspond pas à GET
, le serveur renvoie une nouvelle erreur. Lorsque les deux vérifications passent, le serveur renvoie sa réponse de succès "Hello!"
.,
La dernière chose que nous devons faire est de modifier la balise handleFunc
fonction dans notre main()
fonction d’accepter le ci-dessus helloHandler
fonction.
http.HandleFunc("/hello", helloHandler)
ci-Dessous le code complet pour votre server.go
fichier.
ensuite, nous allons démarrer le serveur web Go avecgo run server.go
. Vous pouvez tester votre sécurité en envoyant une requête POST à à l’aide d’un outil tel que Postman ou cURL.
Démarrer statique serveur web
Dans cette étape, nous allons créer un simple fichier server pour héberger des fichiers statiques., Ce sera un ajout très simple au serveur web.
pour nous assurer que nous avons du contenu à servir sur le serveur web, modifions le fichierindex.html
situé dans le dossierstatic
. Pour garder les choses simples, ajoutez simplement un en-tête au fichier qui dit « Static Website
. »Si vous le souhaitez, vous pouvez ajouter plus de fichiers ou de fichiers de style pour rendre votre serveur web un peu plus agréable.
<html> <head> <title>Static Website</title> </head> <body> <h2>Static Website</h2> </body></html>
Pour servir de la balise static
dossier, vous devez ajouter deux lignes de code server.go
., La première ligne de code crée l’objet serveur de fichiers à l’aide de la fonction FileServer
. Cette fonction accepte un chemin dans le type http.Dir
. Par conséquent, nous devons convertir le chemin de chaîne "./static”
en un type de chemin http.Dir
.
n’oubliez pas de spécifier la routeHandle
, qui accepte un chemin et le serveur de fichiers. Cette fonction agit de la même manière que la fonction HandleFunc
, avec quelques petites différences. Pour en savoir plus sur l’objet FileServer
, consultez la documentation.,
Il est temps d’essayer le code. Lancez le serveur avec des go run server.go
et visiter . Vous devriez voir l’en-tête » ».
accepter une demande POST de soumission de formulaire
enfin, le serveur web doit répondre à une soumission de formulaire.
ajoutons du contenu au fichierform.html
dans le dossierstatic
. Notez que l’action du formulaire est envoyée à /form
. Cela signifie que la demande POST du formulaire sera envoyée à ., Le formulaire de demande d’entrée pour les deux variables:
name
et address
.
L’étape suivante consiste à créer le gestionnaire d’accepter la balise /form
demande. Le fichierform.html
est déjà servi via le serveur de fichiers et peut être consulté via
First, the function has to call ParseForm()
pour analyser la requête brute et mettre à jourr.PostForm
Etr.Form
. Cela va nous permettre d’accéder à la balise name
et address
valeurs via la balise r.FormValue
méthode.,
à la fin de la fonction, nous écrivons les deux valeurs dans le ResponseWriter
en utilisant fmt.Fprintf
.
n’oubliez pas d’ajouter la nouvelle route du gestionnaire de formulaire à la fonctionmain()
.
http.HandleFunc("/form", formHandler)
Maintenant, le code ressemble à ceci.
Essayer le gestionnaire de formulaire
Nous pouvons tester le formulaire par le démarrage du serveur avec des go run server.go
. Lorsque le serveur démarre, visitez . Vous devriez voir deux champs de saisie et un bouton envoyer.,
Lorsque vous avez rempli le formulaire, cliquez le submit
le bouton. Le serveur doit traiter votre demande de publication et vous montrer le résultat sur la page de réponse , telle que la réponse ci-dessous.
Si vous voyez le résultat ci-dessus, vous avez créé avec succès votre premier serveur web et de fichiers Golang. Bravo!
Si vous souhaitez explorer davantage les serveurs Web Golang, la documentation du package HTTP Golang regorge d’excellents exemples., Ce tutoriel sur l’écriture d’applications web dans Go est une autre excellente ressource qui couvre la plupart des bases.
LogRocket: visibilité complète dans vos applications web
LogRocket est une solution de surveillance d’application frontend qui vous permet de rejouer les problèmes comme s’ils se produisaient dans votre propre navigateur. Au lieu de deviner pourquoi les erreurs se produisent ou de demander aux utilisateurs des captures d’écran et des vidages de journaux, LogRocket vous permet de rejouer la session pour comprendre rapidement ce qui a mal tourné., Il fonctionne parfaitement avec n’importe quelle application, quel que soit le framework, et dispose de plugins pour enregistrer un contexte supplémentaire à partir de Redux, Vuex et @ngrx/store.
en plus de la journalisation des actions et de L’état Redux, LogRocket enregistre les journaux de console, les erreurs JavaScript, les stacktraces, les requêtes / réponses réseau avec en-têtes + corps, les métadonnées du navigateur et les journaux personnalisés. Il Instrumente également le DOM pour enregistrer le HTML et CSS sur la page, recréant des vidéos parfaites en pixels même des applications d’une seule page les plus complexes.
Essayez gratuitement.