$ mify init todo-app $ cd todo-app
$ mify add service todo-backend
. ├── 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 internal/pkg/generated
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/todo-backend
.
Vous pouvez trouver le schéma OpenAPI pour le todo-backend dans le fichier schemas/todo-backend/api/api.yaml
. 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.
POST /todos
pour ajouter de nouvelles notes de tâches.PUT,GET,DELETE /todos/{id}
pour les mettre à jour, les récupérer et les supprimer.
Remplacez le schéma précédent par celui-ci et exécutez mify generate
. 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.
$ cd go-services $ go mod tidy $ go run ./cmd/todo-backend
Vous pouvez voir le port de service dans le message starting api server
, le copier dans Postman et essayer d'appeler un gestionnaire d'API :
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é.
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
:
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:
go-services/internal/todo-backend/handlers/todos/service.go
pour la méthode POST, et
go-services/internal/todo-backend/handlers/todos/id/service.go
pour les autres.
go-services/internal/todo-backend/handlers/todos/service.go
:
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
:
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" )
go-services/internal/todo-backend/handlers/common.go
:
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é :