$ 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 松散地遵循一种常见的 Go 布局,适用于一个存储库中的多个服务。在internal/pkg/generated
中有用于配置、日志和指标的公共库,可以重复用于多个服务。您的服务转到目录位于internal/todo-backend
。
您可以在schemas/todo-backend/api/api.yaml
文件中找到 todo-backend 的 OpenAPI 模式。工作区根目录下的 Schemas 目录是存放所有与 Mify 相关的服务配置的地方。
POST /todos
用于添加新的待办事项。PUT,GET,DELETE /todos/{id}
用于更新、检索和删除它们。
将之前的模式替换为这个模式并运行mify generate
。您可以在每次更新架构时运行它,它将重新生成所有更改的内容。
$ cd go-services $ go mod tidy $ go run ./cmd/todo-backend
您可以在starting api server
日志消息中看到服务端口,将其复制到 Postman,然后尝试调用一些 API 处理程序:
您是可以遇到处里编译程序未重返每玩法,真是期望值的,而是如同不正确所暗含的那,它还未满足。
首先,我们需要为待办事项创建一个模型,我们将把它放在domain
包中
在go-services/internal/todo-backend/domain/todo.go
中:
这也是定义存储接口的好地方,这对于将持久性逻辑与应用程序解耦很有用。在本教程中,我们将在内存中使用模拟存储,但 Mify 还支持 Postgres,我们可以在后续文章中添加。让我们将存储放在go-services/internal/todo-backend/storage/todo_mem.go:
go-services/internal/todo-backend/handlers/todos/service.go
对于 POST 方法,和
go-services/internal/todo-backend/handlers/todos/id/service.go
对于其他人。
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
:
查检有无填加了 GET 需求:
选择 PUT ajax请求更新时间它:
册除它:
并二次工作 GET 以檢查它会不删掉除: