Maison > développement back-end > Golang > Comment implémenter une connexion reposante dans Golang

Comment implémenter une connexion reposante dans Golang

PHPz
Libérer: 2023-04-25 15:15:04
original
835 Les gens l'ont consulté

Avec le développement rapide d'Internet, de plus en plus d'applications utilisent des interfaces RESTful. La simplicité, l'efficacité et la facilité d'utilisation sont devenues les principales raisons de la popularité des interfaces RESTful. Golang est un langage de programmation similaire au langage C et est devenu un langage de programmation très populaire dans le domaine Internet. Dans cet article, nous expliquerons comment Golang implémente l'interface de connexion RESTful.

L'interface RESTful est une interface API basée sur le protocole HTTP et le style architectural REST. L'interface RESTful utilise principalement des verbes HTTP et des URI pour décrire les opérations sur les ressources, et utilise le format JSON pour transmettre des données. Par conséquent, avant d'implémenter l'interface de connexion RESTful, nous devons clarifier la signification des verbes HTTP et des URI.

Verbe HTTP :

  • GET : obtenir des informations sur la ressource
  • POST : créer une nouvelle ressource
  • PUT : mettre à jour la ressource
  • DELETE : supprimer la ressource

Format URI :

HTTP动词 /模块名称/资源类型/资源ID
Copier après la connexion

Ce qui suit est un exemple simple de programme Golang, using Pour implémenter l'interface de connexion RESTful :

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

//定义user结构体
type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

//模拟数据源
var users = []User{
    User{"admin", "123456"},
    User{"guest", "123456"},
}

//登录接口
func loginHandler(w http.ResponseWriter, r *http.Request) {
    //获取HTTP请求中的用户名和密码
    var user User
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    //验证用户名和密码
    for _, u := range users {
        if u.Username == user.Username && u.Password == user.Password {
            w.WriteHeader(http.StatusOK)
            return
        }
    }
    w.WriteHeader(http.StatusUnauthorized)
}

func main() {
    //注册登录接口
    http.HandleFunc("/api/login", loginHandler)

    //启动服务
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
Copier après la connexion

Comme indiqué ci-dessus, nous avons utilisé Golang pour écrire une interface de connexion RESTful simple. Cette interface utilise le format JSON pour transmettre les données et peut vérifier le nom d'utilisateur et le mot de passe reçus. Si la vérification réussit, elle renvoie le code d'état HTTP 200, sinon elle renvoie 401.

Ensuite, nous analyserons ce code étape par étape :

Définir la structure Utilisateur

type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}
Copier après la connexion

La structure Utilisateur est définie ici, qui contient deux attributs : Nom d'utilisateur et Mot de passe. Notez que la balise format json:"xxx" est utilisée ici pour identifier le nom JSON de l'attribut.

Source de données simulée

var users = []User{
    User{"admin", "123456"},
    User{"guest", "123456"},
}
Copier après la connexion

Ici, au lieu d'utiliser une vraie base de données, nous créons une source de données fictive pour simuler plusieurs utilisateurs.

Interface de connexion

func loginHandler(w http.ResponseWriter, r *http.Request) {
    var user User
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    for _, u := range users {
        if u.Username == user.Username && u.Password == user.Password {
            w.WriteHeader(http.StatusOK)
            return
        }
    }
    w.WriteHeader(http.StatusUnauthorized)
}
Copier après la connexion

Cette fonction reçoit la requête HTTP et extrait le nom d'utilisateur et le mot de passe de la requête. Ensuite, vérifiez que le nom d'utilisateur et le mot de passe saisis sont corrects en parcourant les utilisateurs existants dans la source de données simulée. Si la vérification réussit, le code d'état HTTP 200 est renvoyé, sinon 401 est renvoyé.

Enregistrer l'interface de connexion

http.HandleFunc("/api/login", loginHandler)
Copier après la connexion

Ce code signifie enregistrer une interface /login Lorsqu'une requête HTTP correspondante arrive, la fonction de traitement loginHandler sera appelée pour le traitement.

Démarrer le service

err := http.ListenAndServe(":8080", nil)
Copier après la connexion

Ce code signifie démarrer un service HTTP, écouter le port 8080 et traiter les requêtes HTTP. Si le démarrage réussit, le service HTTP continuera à s'exécuter, en attendant l'arrivée des requêtes HTTP.

Jusqu'à présent, nous avons implémenté avec succès une interface de connexion RESTful écrite en Golang, qui peut vérifier le nom d'utilisateur et le mot de passe saisis et renvoyer le code d'état HTTP correspondant. L'interface RESTful est une technologie très importante en définissant des verbes URI et HTTP unifiés, l'appel et l'utilisation de l'interface peuvent être considérablement simplifiés. Dans les applications pratiques, nous devons combiner les propres caractéristiques de Golang et utiliser rationnellement les bibliothèques et les frameworks associés pour obtenir une interface RESTful plus efficace et plus concise.

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:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal