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