サービスの作成方法に関する資料はたくさんあります。最初に使用するフレームワークを選択する必要があり、次にハンドラー、構成、ログ、ストレージなどの配線が必要であり、そのサービスをどこかにデプロイすることは言うまでもありません。私たちはかなり長い間サービスを書いてきましたが、多くの場合、サービスをつなぎ合わせるという面倒なプロセスをすべてスキップして、便利なコードを書きたいと思うでしょう。
Mify と呼ばれるツールを作成したのはそのためです。これはオープンソース インフラストラクチャのボイラープレート ジェネレーターであり、これまでのベスト プラクティスを利用してサービスを構築するのに役立ちます。そのため、このチュートリアルでは、Mify を使用して単純なサービスを作成する方法を、古典的な例である To Do アプリで示します。
GitHub から Mify を入手してください: https://github.com/mify-io/mify
Postmanまたは curl をインストールしてエンドポイントをテストする
このチュートリアルを開始する前に、完全な例へのリンクを次に示します: https://github.com/mify-io/todo-app-example
Mify をインストールした後、プロジェクトを開始するには、ワークスペースを作成する必要があります。
$ mify init todo-app $ cd todo-app
新しいワークスペースに入ったら、次を実行します。
$ mify add service todo-backend
これで、To Do バックエンド用の 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 レイアウトの 1 つに大まかに従っており、1 つのリポジトリで複数のサービスに適しています。 internal/pkg/generated
には、複数のサービスで再利用できる構成、ログ、およびメトリック用の共通ライブラリがあります。サービスの go-to ディレクトリはinternal/todo-backend
にあります。
この時点で、このサービスはかなりむき出しになっているため、API を追加する必要があります。
todo-backend の OpenAPI スキーマはschemas/todo-backend/api/api.yaml
ファイルにあります。ワークスペースのルートにある Schemas ディレクトリは、Mify に関連するすべてのサービス構成が格納される場所です。
todo バックエンド用の単純な CRUD API を作成しましょう。
POST /todos
。PUT,GET,DELETE /todos/{id}
。
OpenAPI スキーマでこの API を検索する方法は次のとおりです。
https://gist.github.com/chebykinn/5dc7b30a2a57a1ab4584895131295e1f
以前のスキーマをこれに置き換えて、 mify generate
を実行します。スキーマを更新するたびに実行でき、変更されたすべてのものを再生成します。
$ cd go-services $ go mod tidy $ go run ./cmd/todo-backend
次のような起動ログが表示されるはずです。
starting api server
でサービス ポートを確認し、それを Postman にコピーして、いくつかの API ハンドラーを呼び出してみてください。
ハンドラーが何も返していないことがわかります。これは、エラーが示唆するように、まだ実装されていないためです。
まず、todo ノートのモデルを作成する必要があります。それをdomain
パッケージに入れます。
go-services/internal/todo-backend/domain/todo.go
:
これは、ストレージのインターフェイスを定義するのにも適した場所です。これは、永続化ロジックをアプリケーションから切り離すのに役立ちます。このチュートリアルでは、メモリ内のモック ストレージを使用しますが、Mify は Postgres もサポートしているため、後でフォローアップ記事で追加できます。 go-services/internal/todo-backend/storage/todo_mem.go:
ロジックはこれですべてです。あとは、ハンドラに追加するだけです。
POST メソッドのgo-services/internal/todo-backend/handlers/todos/service.go
、および
その他の場合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 リクエストで新しい todo ノートを追加できます。
GET リクエストで追加されているかどうかを確認します。
PUT リクエストで更新します。
消して:
GET をもう一度実行して、削除されたかどうかを確認します。
Postgres などの永続ストレージ
構成、
認証ミドルウェア、
クラウドへの展開。
このようなことのほとんどはドキュメントでカバーされているので、https: //mify.io/docsで確認してください。ただし、次の記事にご期待ください。
こちらにも掲載