Il existe de nombreux documents sur la façon d'écrire des services, où vous devez d'abord choisir un cadre à utiliser, puis vient le câblage des gestionnaires, des configurations, des journaux, du stockage, etc., sans parler du déploiement de ce service quelque part. Nous écrivons des services depuis un certain temps et le plus souvent, vous voudriez simplement ignorer tout ce processus fastidieux de collage d'éléments et simplement écrire du code utile. C'est pourquoi nous avons créé un outil, appelé Mify - c'est un générateur de passe-partout d'infrastructure open source, qui vous aiderait à créer un service, en prenant les meilleures pratiques utilisées à ce jour. Ainsi, dans ce didacticiel, nous montrerons comment créer un service simple à l'aide de Mify avec un exemple classique - une application de tâches. Conditions préalables Installez 1.18+, Go Docker Obtenez Mify depuis notre GitHub : https://github.com/mify-io/mify Installez ou curl pour tester les terminaux Postman Avant de commencer ce tutoriel, voici le lien vers l'exemple complet : https://github.com/mify-io/todo-app-example Création d'un projet Après avoir installé Mify, pour démarrer le projet, vous devez créer l'espace de travail : $ mify init todo-app $ cd todo-app Après être entré dans le nouvel espace de travail, exécutez : $ mify add service todo-backend Maintenant, cela créera un modèle Go pour votre backend de tâches. Voici une arborescence simplifiée de l'espace de travail avec tous les fichiers générés : . ├── go-services │ ├── cmd │ │ ├── dev-runner │ │ │ └── main.go │ │ └── todo-backend │ │ ├── Dockerfile │ │ └── main.go │ ├── go.mod │ ├── go.sum │ └── internal │ ├── pkg │ │ └── generated │ │ ├── configs │ │ │ └── ... │ │ ├── consul │ │ │ └── ... │ │ ├── logs │ │ │ └── ... │ │ └── metrics │ │ └── ... │ └── todo-backend │ ├── app │ │ ├── request_extra.go │ │ ├── router │ │ │ └── router.go │ │ └── service_extra.go │ └── generated │ ├── api | | └── ... │ ├── app │ │ └── ... │ ├── apputil │ │ └── ... │ └── core │ └── ... ├── schemas │ └── todo-backend │ ├── api │ │ └── api.yaml │ └── service.mify.yaml └── workspace.mify.yaml Mify suit vaguement l'une des dispositions Go courantes, qui convient à plusieurs services dans un référentiel. Dans il existe des bibliothèques communes pour les configurations, les journaux et les métriques qui peuvent être réutilisées pour plusieurs services. Votre répertoire de service se trouve dans . internal/pkg/generated internal/todo-backend À ce stade, ce service est assez simple, nous devons donc lui ajouter une API. Définition de l'API Vous pouvez trouver le schéma OpenAPI pour le todo-backend dans le fichier . Le répertoire Schemas à la racine de l'espace de travail est un endroit où toutes les configurations de service liées à Mify sont stockées. schemas/todo-backend/api/api.yaml Créons une API CRUD simple pour votre backend todo : pour ajouter de nouvelles notes de tâches. POST /todos pour les mettre à jour, les récupérer et les supprimer. PUT,GET,DELETE /todos/{id} Voici à quoi ressemblerait votre schéma OpenAPI pour cette API : https://gist.github.com/chebykinn/5dc7b30a2a57a1ab4584895131295e1f Remplacez le schéma précédent par celui-ci et exécutez . Vous pouvez l'exécuter chaque fois que vous mettez à jour le schéma et il régénérera tous les éléments modifiés. mify generate Construire et tester $ cd go-services $ go mod tidy $ go run ./cmd/todo-backend Vous devriez voir des journaux de démarrage comme celui-ci : Vous pouvez voir le port de service dans le message , le copier dans Postman et essayer d'appeler un gestionnaire d'API : starting api server Vous pouvez voir que le gestionnaire n'a rien renvoyé, ce qui est attendu car, comme le suggère l'erreur, il n'est pas encore implémenté. Ajout de modèles et de stockage fictif Tout d'abord, nous devons créer un modèle pour la todo note, nous le mettrons dans le package domain dans : go-services/internal/todo-backend/domain/todo.go https://gist.github.com/chebykinn/0c2905f07d76082bd9d63a56a720371c?embedable=true C'est également un bon endroit pour définir l'interface de stockage, ce qui est utile pour découpler la logique de persistance de l'application. Dans ce didacticiel, nous utiliserons un stockage fictif, en mémoire, mais Mify prend également en charge Postgres, que nous pourrons ajouter plus tard dans un article de suivi. Mettons le stockage dans go-services/internal/todo-backend/storage/todo_mem.go: https://gist.github.com/chebykinn/1769d6881e929bfb225fc203c48e1496?embedable=true C'est tout pour la logique, nous avons juste besoin de l'ajouter aux gestionnaires. Implémentation des gestionnaires pour la méthode POST, et go-services/internal/todo-backend/handlers/todos/service.go pour les autres. go-services/internal/todo-backend/handlers/todos/id/service.go Voici un exemple de stub de la méthode POST : https://gist.github.com/chebykinn/e49b483330ea7c84a1b8082b0a86fc01?embedable=true Maintenant, implémentons tous les gestionnaires. : go-services/internal/todo-backend/handlers/todos/service.go https://gist.github.com/chebykinn/6f88c03680167c4dc286f1b6226341f9?embedable=true N'oubliez pas de mettre à jour les importations : import ( "net/http" "strconv" "example.com/namespace/todo-app/go-services/internal/todo-backend/domain" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/api" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/apputil" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/core" "example.com/namespace/todo-app/go-services/internal/todo-backend/handlers" ) : go-services/internal/todo-backend/handlers/todos/id/service.go https://gist.github.com/chebykinn/98d2d051671dfbefb464b1f59b159d15?embedable=true Et voici les importations pour eux aussi : import ( "errors" "fmt" "net/http" "strconv" "example.com/namespace/todo-app/go-services/internal/todo-backend/domain" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/api" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/apputil" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/core" "example.com/namespace/todo-app/go-services/internal/todo-backend/handlers" "example.com/namespace/todo-app/go-services/internal/todo-backend/storage" ) La logique du gestionnaire est assez simple, nous convertissons simplement les modèles OpenAPI générés vers notre application un et inversement, et pour éviter la duplication dans le code, voici une aide pour créer une réponse TodoNode, qui est utilisée dans ces implémentations : : go-services/internal/todo-backend/handlers/common.go https://gist.github.com/chebykinn/702f24abe035cd99dbc06c4447ecc755?embedable=true Tester à nouveau Tout d'abord, nous pouvons ajouter une nouvelle todo note avec une requête POST : Vérifiez s'il est ajouté avec une requête GET : Mettez-le à jour avec une requête PUT : Supprime-le: Et exécutez à nouveau GET pour vérifier s'il a été supprimé : Et après Stockage persistant, comme Postgres, Configuration, Intergiciel d'authentification, Déploiement dans le cloud. La plupart de ces choses sont couvertes dans nos documents, alors consultez-les : , mais restez à l'écoute pour les prochains articles. https://mify.io/docs Également publié ici