[Go言語]ginフレームワークでアプリ開発~バリデーションとDAO編~

前回は、例外処理とそのテストについて実装を行いました。本日も引き続き、実装を進めていきます。

前回

プロジェクト構成

新しく以下のファイルを作成してください。

daoは、「Data Access Object」、 dtoは、「Data Transfer Object」の略です。

バリデーションの実装

バリデーションの実装をしましょう。

バリデーションとは、ユーザーがインプットした情報が、API側で受け取れる形式になっているかチェックする仕組みのことです。

例えば、ProductのNameが空だった場合、NewBadRequestErrorが発生するようにproduct.goファイルに実装してみます。

ValidateをProductのメソッドとして実装しました。ProductのNameが設定されていないとNewBadRequestErrorが発生します。

検証のため、product_test.goにテストコードを書いてみましょう。

テストを実行します。

DAOの作成

先述の通り、product_dao.goファイルのdaoは「Data Access Object」であり、DBのアクセス処理を記述します。

簡易メソッドの実装

まずは、商品IDから商品情報を取得するGetと商品を保存するSaveを実装します。

DBへの登録はまだ行いません。その代わりに、Map(productsDB)に保存します。

新しいErrorユーティリティ(NewNotFoundError)が必要となるため、api_errors.goに書き込みましょう。

テストコードの実装

テストコードを書いて、動作確認してみましょう。

まずは、Saveからです。

テストを実行します。

続いて、Getのテストを書きます。

テストを実行します。

Serviceの作成

products_service.goには、ビジネスロジックを実装します。

Saveサービス

ここでは、商品の検証、保存を実装しています。

このサービスをcontrollerから呼び出します。

controllerとビジネスロジックを分離することで、機能追加や改修、バグ調査などがしやすくなると思います。

それでは、動作確認をしてみましょう。コンテナを立ち上げてください。

Talend API TesterからAPIに対してリクエストを送ります。

動作は問題なさそうですね。

Getサービス

ここでは、指定したIDに紐づく商品データを取得します。

動作確認をしましょう。Ctrl + c でコンテナを停止後、以下のコマンドで立ち上げてください。

最初に、Saveサービスを呼び出してください。

ここでメモリ内に保持している「id=1」を使って、Getサービスを動かしてみます。

OKですね。

URL「http://localhost:8080/products/1」の「1」がIDです。

これが、数値以外のものを渡すとエラーが発生するようにしています。

テスト

GetProductのテストを書いてみましょう。全部で3つです。

  1. 正常系テスト
  2. product_idが数値以外のテスト
  3. 存在しないproduct_idを渡した時のテスト

ginのControllerのテストでは、コンテキスト(*gin.Context)を作ることが一番難しかったかもしれません。

コンテキストは、getRequestHandler関数にて作成しました。

テストを実行してみましょう。

OKですね。

次回

次回も引き続き、アプリケーション開発を行なっていきたいと思います。

コメントを残す