paint-brush
在找不到相同样版的事情下能 Go 搭配 RESTful API 提供服务 经历过@ichebykin
1,126 讀數
1,126 讀數

在没有重复样板的情况下用 Go 构建 RESTful API 服务

通过 Mify6m2023/03/06
Read on Terminal Reader

太長; 讀書

我们编写服务已经有一段时间了,而且通常情况下,您只是想跳过所有这些将东西粘合在一起的繁琐过程,而只是编写有用的代码,因此我们创建了 Mify——一个开源基础设施样板生成器。在本教程中,我们将通过一个经典示例展示如何使用 Mify 创建一个简单的服务——一个待办事项应用程序。
featured image - 在没有重复样板的情况下用 Go 构建 RESTful API 服务
Mify HackerNoon profile picture



有较多针对该怎样编辑业务的数据资料,1您须要选定 要在使用的眼镜框架,并且是处里程序流程图、安装、系统日志、文件存储等的相连,更还要说在某处部署工作该业务了。小编编辑业务已有个段耗时了,可是一般说来问题下,您想要关闭全部的这部分将方面粘接在一件的死板进程,而知识编辑有些好用的二维码。


这就会为甚么自己創建一堆个名是 Mify 的软件——它是个慧强依据的设施样版形成器,可能的帮助您建立服务的管理,适用至今就行用的最优用。因为,在本基础教程中,自己将采用其中一经典爱情实例体现要怎样用 Mify 創建其中一容易的服务的管理——其中一待处事项用子程序。

先决条件

  • 施工 1.18+,
  • 从人们的 GitHub 修改 Mify: ://github.com/mify-io/mify
  • 装设或 curl 来測試端点


在逐渐开始本训练技巧前几天,在此是详尽范例的超链接:

创建项目

安装使用 Mify 后,要起动该项目,您还要加入工做区:
 $ mify init todo-app $ cd todo-app


进来新工作上区后,工作:
 $ mify add service todo-backend


当前,这将为您的待办事效率项后台开发开启一款 Go 设计。它是包函所有绘制系统文件的任务区的变得简化树:
 . ├── 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

这个时候此服务性还挺简单,因公司应该向其加 API。

定义API

您可以在schemas/todo-backend/api/api.yaml文件中找到 todo-backend 的 OpenAPI 模式。工作区根目录下的 Schemas 目录是存放所有与 Mify 相关的服务配置的地方。


我不想们为您的待办事效率项后端开发打造某个简单化的 CRUD API:
  • POST /todos用于添加新的待办事项。
  • PUT,GET,DELETE /todos/{id}用于更新、检索和删除它们。

以内是您的 OpenAPI 模式英文查阅此 API 的方试:

将之前的模式替换为这个模式并运行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对于其他人。

以下是 POST 的方法的存根举例: 今天,我不想们完成所有的工作软件程序。

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" )


整理系统软件的逻缉十分的简洁,自己只不过是将自动生成的 OpenAPI 三维模型变为为自己的应用软件系统软件并回退,考虑到防止编号重覆,在这全是个选用开启 TodoNode 崩溃的有助于系统软件,它在这控制中选用:

go-services/internal/todo-backend/handlers/common.go :

再次测试

首选,.我会食用 POST 提起加上一种新的待处事项:

查检有无填加了 GET 需求:

选择 PUT ajax请求更新时间它:

册除它:

并二次工作 GET 以檢查它会不删掉除:

下一步是什么

  • 牢固随意调节,如 Postgres,
  • 配制,
  • 证书两边件,
  • 堡垒机被部署到云存储。


基本数知识都分为在当我们的文本中,为此请观察它是:https: ,但请马上的关注下一次本文。
也在上传
바카라사이트 바카라사이트 온라인바카라