Maison développement back-end Golang Utilisez go-zero+Vue.js pour implémenter une conception de services API séparés front-end et back-end

Utilisez go-zero+Vue.js pour implémenter une conception de services API séparés front-end et back-end

Jun 23, 2023 am 08:46 AM
vuejs go-zero api服务设计

À l’ère du développement rapide d’Internet, la conception de services API séparés front-end et back-end est devenue une idée de conception très populaire. En utilisant cette idée de conception, nous pouvons développer séparément le code front-end et le code back-end, obtenant ainsi un développement plus efficace et une meilleure maintenabilité du système. Cet article explique comment implémenter une conception de services API séparés front-end et back-end à l'aide de go-zero et Vue.js.

1. Avantages de la conception de services API séparés front-end et back-end

Les avantages de la conception de services API séparés front-end et front-end incluent principalement les aspects suivants :

  1. Efficacité de développement plus élevée

Utilisation de front La conception de services API séparés -end et front-end peut effectuer le développement front-end et back-end en parallèle, sans avoir à attendre que l'autre partie termine le développement avant de passer à l'étape suivante du développement. Cela peut raccourcir le cycle de développement et améliorer l’efficacité du développement.

  1. Atteignez le multiplateforme

Grâce à la conception de services API séparés front-end et back-end, le front-end et le back-end peuvent être déployés respectivement sur différents serveurs pour obtenir un multiplateforme. Cela peut mieux s’adapter aux différents besoins et scénarios.

  1. Améliorer la maintenabilité du système

L'utilisation de la conception de services API séparés front-end et back-end peut séparer le code front-end et back-end, facilitant ainsi la maintenance. Les développeurs front-end et back-end peuvent être respectivement responsables de la maintenance de leur propre code, ce qui peut réduire la difficulté et les risques liés à la maintenance des logiciels.

2. Introduction à go-zero

go-zero est un framework de développement de microservices hautes performances qui fournit une multitude de fonctions et de plug-ins pour créer rapidement des applications de microservices hautes performances. go-zero prend en charge plusieurs protocoles de transport, notamment HTTP, gRPC et TCP. Il fournit également une variété de middleware, notamment ETCD, Redis, MySQL, etc., qui peuvent facilement implémenter des fonctions telles que l'enregistrement des services, le centre de configuration et le stockage.

3. Introduction à Vue.js

Vue.js est un framework JavaScript frontal très populaire. Il adopte le modèle d'architecture MVVM (Model-View-ViewModel) et fournit une multitude de composants et de plug-ins, qui peuvent créez rapidement des applications frontales efficaces. Vue.js suit un modèle de développement basé sur les données, qui peut réduire le nombre d'opérations DOM et améliorer les performances des applications frontales.

4. Utilisez go-zero et Vue.js pour implémenter la conception de services API séparés front-end et back-end

Tout d'abord, nous devons utiliser go-zero pour créer le service back-end. go-zero fournit une multitude de plug-ins et de middleware, et nous pouvons rapidement créer des services API hautes performances. Ensuite, nous utilisons Vue.js pour créer l'application front-end et appeler le service API back-end via le protocole HTTP pour obtenir une conception de service API séparée front-end et back-end.

Ci-dessous, nous prenons comme exemple un système simple de gestion des informations sur les étudiants pour montrer comment utiliser go-zero et Vue.js pour implémenter une conception de services API séparés front-end et back-end.

  1. Code backend

Nous écrivons d'abord le code backend pour implémenter le service API via le framework go-zero. Créez un répertoire étudiant dans le répertoire racine du projet, puis créez un fichier student.api dans le répertoire pour définir l'interface API pour les informations sur les étudiants :

type (
    Student struct {
        Id       int64  `db:"id"`
        Name     string `db:"name"`
        Age      int    `db:"age"`
        Class    string `db:"class"`
        CreateAt string `db:"create_at"`
        UpdateAt string `db:"update_at"`
    }
    
    ListRequest struct {
        Offset int `form:"offset"`
        Limit  int `form:"limit"`
    }
)

type StudentApi interface {
    AddStudent(ctx context.Context, req types.AddStudentRequest) (*types.StudentReply, error)
    DeleteStudent(ctx context.Context, req types.DeleteStudentRequest) (*types.StudentReply, error)
    UpdateStudent(ctx context.Context, req types.UpdateStudentRequest) (*types.StudentReply, error)
    GetStudent(ctx context.Context, req types.GetStudentRequest) (*types.StudentReply, error)
    ListStudent(ctx context.Context, req types.ListStudentRequest) (*types.StudentListReply, error)
}
Copier après la connexion

Nous avons défini 5 interfaces API dans ce fichier, qui servent à ajouter , Supprimer, modifier, interroger et répertorier les informations sur les étudiants. Ensuite, nous créons un fichier service.go dans l'annuaire étudiant pour implémenter l'interface de service d'informations sur les étudiants :

type StudentService struct {
    models.SvcCtx
}

func NewStudentService(ctx *models.ServiceContext) *StudentService {
    return &StudentService{
        SvcCtx: ctx,
    }
}

func (s *StudentService) AddStudent(ctx context.Context, req types.AddStudentRequest) (*types.StudentReply, error) {
    student := &model.Student{
        Name:   req.Name,
        Age:    req.Age,
        Class:  req.Class,
        CreateAt: time.Now().Format("2006-01-02 15:04:05"),
        UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
    }

    id, err := s.Model.Insert(student)
    if err != nil {
        return nil, err
    }

    return &types.StudentReply{
        Id: id,
    }, nil
}

func (s *StudentService) DeleteStudent(ctx context.Context, req types.DeleteStudentRequest) (*types.StudentReply, error) {
    affected, err := s.Model.Delete(&model.Student{
        Id: req.Id,
    })
    if err != nil {
        return nil, err
    }

    return &types.StudentReply{
        Affected: affected,
    }, nil
}

func (s *StudentService) UpdateStudent(ctx context.Context, req types.UpdateStudentRequest) (*types.StudentReply, error) {
    student := &model.Student{
        Id: req.Id,
        Name:   req.Name,
        Age:    req.Age,
        Class:  req.Class,
        UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
    }

    affected, err := s.Model.Update(student)
    if err != nil {
        return nil, err
    }

    return &types.StudentReply{
        Affected: affected,
    }, nil
}

func (s *StudentService) GetStudent(ctx context.Context, req types.GetStudentRequest) (*types.StudentReply, error) {
    student, err := s.Model.FindOne(req.Id)
    if err != nil {
        return nil, err
    }

    return &types.StudentReply{
        Id: student.Id,
        Name: student.Name,
        Age: student.Age,
        Class: student.Class,
        CreateAt: student.CreateAt,
        UpdateAt: student.UpdateAt,
    }, nil
}

func (s *StudentService) ListStudent(ctx context.Context, req types.ListStudentRequest) (*types.StudentListReply, error) {
    students, err := s.Model.List(req.Offset, req.Limit)
    if err != nil {
        return nil, err
    }

    var studentList []*types.StudentReply
    for _, student := range students {
        studentList = append(studentList, &types.StudentReply{
            Id: student.Id,
            Name: student.Name,
            Age: student.Age,
            Class: student.Class,
            CreateAt: student.CreateAt,
            UpdateAt: student.UpdateAt,
        })
    }

    return &types.StudentListReply{
        List: studentList,
    }, nil
}
Copier après la connexion

Dans ce fichier, nous implémentons les 5 interfaces API définies dans le fichier student.api via le fichier service.go. Nous avons défini une structure StudentService, qui contient un membre models.SvcCtx via lequel nous pouvons accéder à la base de données dont nous avons besoin.

  1. Code front-end

Ensuite, nous construisons l'application front-end via Vue.js. Nous pouvons utiliser l'échafaudage Vue-cli pour créer des projets de base. Supposons que nous ayons utilisé Vue-cli pour créer un projet frontal nommé student-mgmt.

Dans le projet student-mgmt, nous devons utiliser axios pour envoyer des requêtes HTTP afin d'accéder à l'interface API backend. Nous pouvons effectuer les configurations pertinentes dans le fichier main.js :

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

import axios from 'axios'

Vue.prototype.$http = axios
axios.defaults.baseURL = 'http://localhost:8888/student/'

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
Copier après la connexion

Dans le code ci-dessus, nous définissons axios comme objet prototype de Vue, afin que this.$http puisse être utilisé directement dans le composant pour envoyer des requêtes HTTP. Nous définissons également la baseURL d'axios sur l'adresse de l'interface API backend, qui est http://localhost:8888/student/.

Ensuite, écrivons le code du composant de student-mgmt. Créez le répertoire des composants dans le répertoire student-mgmt, puis créez un composant StudentList.vue dans ce répertoire pour afficher la liste des étudiants :

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>Name</th>
          <th>Age</th>
          <th>Class</th>
          <th>CreateAt</th>
          <th>UpdateAt</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="student in students" :key="student.id">
          <td>{{ student.id }}</td>
          <td>{{ student.name }}</td>
          <td>{{ student.age }}</td>
          <td>{{ student.class }}</td>
          <td>{{ student.create_at }}</td>
          <td>{{ student.update_at }}</td>
          <td>
            <button @click="deleteStudent(student.id)">删除</button>
          </td>
        </tr>
      </tbody>
    </table>

    <button @click="addStudent()">新增</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      students: []
    }
  },
  methods: {
    addStudent () {
      this.$router.push('/add')
    },
    deleteStudent (id) {
      this.$http.delete(id).then(() => {
        this.getStudents()
      })
    },
    getStudents () {
      this.$http.get('?limit=20').then(({ data }) => {
        this.students = data.list
      })
    }
  },
  mounted () {
    this.getStudents()
  }
}
</script>
Copier après la connexion

Dans le code ci-dessus, nous avons introduit le framework Vue.js et défini un composant StudentList . Ce composant est utilisé pour afficher la liste des étudiants. Nous utilisons l'instruction v-for pour parcourir les données de la liste des étudiants et les afficher dans le tableau. Nous avons également défini une méthode addStudent pour accéder à la page où les nouvelles informations sur les étudiants sont ajoutées. Nous utilisons axios pour envoyer des requêtes HTTP, obtenir la liste des étudiants via la méthode get et supprimer les informations sur les étudiants via la méthode delete.

  1. Inscription et démarrage du service API

Après avoir terminé l'écriture du code back-end et front-end, nous devons également nous inscrire et démarrer le service API back-end. Nous créons un fichier student.go dans le répertoire racine du projet pour définir l'enregistrement et le démarrage du service.

Nous définissons le code suivant dans le fichier student.go :

package main

import (
    "log"

    "zero-study/api/internal/config"
    "zero-study/api/internal/handler"
    "zero-study/api/internal/svc"
    "zero-study/api/internal/types"

    "github.com/tal-tech/go-zero/core/conf"
    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/service"
)

func main() {
    var c config.Config
    conf.MustLoad("config.yaml", &c)

    ctx := svc.NewServiceContext(c)
    srv := service.NewServer(c.ServerConf, handler.NewHandler(ctx))

    types.RegisterStudentApiServer(srv, handler.NewStudentHandler(ctx))

    logx.Must(srv.Start())
}
Copier après la connexion

在该文件中,我们首先通过conf.MustLoad函数来加载config.yaml文件中的配置参数,然后通过svc.NewServiceContext函数来创建服务上下文对象。接着,我们调用service.NewServer函数来创建一个新的服务对象,并将服务配置和Handler传入。最后,我们使用types.RegisterStudentApiServer函数来注册API服务,然后调用srv.Start方法来启动API服务。

完成上述步骤后,我们运行go run student.go命令即可启动API服务。

  1. 总结

在本文中,我们介绍了前后端分离式API服务设计,以及如何使用go-zero和Vue.js来实现该设计模式。通过go-zero和Vue.js的结合,我们可以快速构建出高性能的前后端分离式API服务,提高开发效率和系统维护性。
通过实例的演示,我们可以看出,更多的大型企业在使用前后端分离式API服务设计方案。与fe,iOS,Android甚至小程序方案相比,前后分离式API的开发模式,前端和后端各自专攻、分工明确,API 服务也成了产品经理和各端工程师之间的一个契约。它让不同的客户端直接面向服务器进行对接,除去了 web 页面这种渲染环节,利用了ajax等技术通信。从而加快了前端和后端的开发效率和提高了系统运行的稳定性。

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelques conseils pour développer des applications Android en utilisant Vue.js et le langage Kotlin Quelques conseils pour développer des applications Android en utilisant Vue.js et le langage Kotlin Jul 31, 2023 pm 02:17 PM

Quelques conseils pour développer des applications Android en utilisant Vue.js et le langage Kotlin Avec la popularité des applications mobiles et la croissance continue des besoins des utilisateurs, le développement d'applications Android attire de plus en plus l'attention des développeurs. Lors du développement d’applications Android, il est crucial de choisir la bonne pile technologique. Ces dernières années, les langages Vue.js et Kotlin sont progressivement devenus des choix populaires pour le développement d'applications Android. Cet article présentera quelques techniques de développement d'applications Android à l'aide du langage Vue.js et Kotlin, et donnera des exemples de code correspondants. 1. Configurer l'environnement de développement au début

Quelques conseils pour développer des applications de visualisation de données à l'aide de Vue.js et Python Quelques conseils pour développer des applications de visualisation de données à l'aide de Vue.js et Python Jul 31, 2023 pm 07:53 PM

Quelques conseils pour développer des applications de visualisation de données à l'aide de Vue.js et Python Introduction : Avec l'avènement de l'ère du big data, la visualisation de données est devenue une solution importante. Dans le développement d'applications de visualisation de données, la combinaison de Vue.js et Python peut offrir de la flexibilité et des fonctions puissantes. Cet article partagera quelques conseils pour développer des applications de visualisation de données à l'aide de Vue.js et Python, et joindra des exemples de code correspondants. 1. Introduction à Vue.js Vue.js est un JavaScript léger

Intégration de Vue.js avec Objective-C, astuces et conseils pour développer des applications Mac fiables Intégration de Vue.js avec Objective-C, astuces et conseils pour développer des applications Mac fiables Jul 30, 2023 pm 03:01 PM

Intégration du langage Vue.js et Objective-C, conseils et suggestions pour développer des applications Mac fiables Ces dernières années, avec la popularité de Vue.js dans le développement front-end et la stabilité d'Objective-C dans le développement d'applications Mac, les développeurs commencent. essayer de combiner les deux pour développer des applications Mac plus fiables et plus efficaces. Cet article présentera quelques conseils et suggestions pour aider les développeurs à intégrer correctement Vue.js et Objective-C et à développer des applications Mac de haute qualité. un

Intégration des langages Vue.js et Lua, bonnes pratiques et partage d'expérience dans la construction de moteurs front-end pour le développement de jeux Intégration des langages Vue.js et Lua, bonnes pratiques et partage d'expérience dans la construction de moteurs front-end pour le développement de jeux Aug 01, 2023 pm 08:14 PM

L'intégration des langages Vue.js et Lua, les meilleures pratiques et le partage d'expériences pour la construction d'un moteur frontal pour le développement de jeux Introduction : Avec le développement continu du développement de jeux, le choix du moteur frontal de jeu est devenu une décision importante. Parmi ces choix, le framework Vue.js et le langage Lua sont devenus le focus de nombreux développeurs. En tant que framework frontal populaire, Vue.js dispose d'un écosystème riche et de méthodes de développement pratiques, tandis que le langage Lua est largement utilisé dans le développement de jeux en raison de ses performances légères et efficaces. Cet article explorera comment

Comment utiliser PHP et Vue.js pour implémenter des fonctions de filtrage et de tri des données sur les graphiques Comment utiliser PHP et Vue.js pour implémenter des fonctions de filtrage et de tri des données sur les graphiques Aug 27, 2023 am 11:51 AM

Comment utiliser PHP et Vue.js pour implémenter des fonctions de filtrage et de tri des données sur des graphiques. Dans le développement Web, les graphiques sont un moyen très courant d'afficher des données. À l'aide de PHP et Vue.js, vous pouvez facilement implémenter des fonctions de filtrage et de tri des données sur les graphiques, permettant aux utilisateurs de personnaliser l'affichage des données sur les graphiques, améliorant ainsi la visualisation des données et l'expérience utilisateur. Tout d’abord, nous devons préparer un ensemble de données que le graphique pourra utiliser. Supposons que nous ayons un tableau de données contenant trois colonnes : nom, âge et notes. Les données sont les suivantes : nom, âge, note, Zhang San, 1890 Li.

Intégration des langages Vue.js et Dart, compétences pratiques et de développement pour créer des interfaces utilisateur d'applications mobiles sympas Intégration des langages Vue.js et Dart, compétences pratiques et de développement pour créer des interfaces utilisateur d'applications mobiles sympas Aug 02, 2023 pm 03:33 PM

Intégration du langage Vue.js et Dart, pratique et compétences en développement pour créer des interfaces utilisateur d'applications mobiles sympas Introduction : Dans le développement d'applications mobiles, la conception et la mise en œuvre de l'interface utilisateur (UI) sont une partie très importante. Afin d'obtenir une interface d'application mobile intéressante, nous pouvons intégrer Vue.js au langage Dart et utiliser les puissantes fonctionnalités de liaison de données et de composants de Vue.js ainsi que la riche bibliothèque de développement d'applications mobiles du langage Dart pour créer une application mobile époustouflante. Interface utilisateur. Cet article vous montrera comment

Développer des robots d'exploration Web et des outils de récupération de données efficaces à l'aide des langages Vue.js et Perl Développer des robots d'exploration Web et des outils de récupération de données efficaces à l'aide des langages Vue.js et Perl Jul 31, 2023 pm 06:43 PM

Utilisez les langages Vue.js et Perl pour développer des robots d'exploration Web et des outils de récupération de données efficaces. Ces dernières années, avec le développement rapide d'Internet et l'importance croissante des données, la demande de robots d'exploration Web et d'outils de récupération de données a également augmenté. Dans ce contexte, c'est un bon choix de combiner le langage Vue.js et Perl pour développer des robots d'exploration Web et des outils de scraping de données efficaces. Cet article expliquera comment développer un tel outil à l'aide du langage Vue.js et Perl, et joindra des exemples de code correspondants. 1. Introduction au langage Vue.js et Perl

Comment utiliser Vue pour implémenter des effets de bulle de discussion de type QQ Comment utiliser Vue pour implémenter des effets de bulle de discussion de type QQ Sep 20, 2023 pm 02:27 PM

Comment utiliser Vue pour implémenter des effets de bulle de discussion de type QQ À l'ère sociale d'aujourd'hui, la fonction de discussion est devenue l'une des fonctions essentielles des applications mobiles et des applications Web. L'un des éléments les plus courants de l'interface de chat est la bulle de discussion, qui permet de distinguer clairement les messages de l'expéditeur et du destinataire, améliorant ainsi efficacement la lisibilité du message. Cet article expliquera comment utiliser Vue pour implémenter des effets de bulle de discussion de type QQ et fournira des exemples de code spécifiques. Tout d'abord, nous devons créer un composant Vue pour représenter la bulle de discussion. Le composant se compose de deux parties principales

See all articles